由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在通过vector+sort进行排序时,所有元素需要先存入vector容器中,sort在排序时又需要将元素全部取出来再进行排序.multimap底层实现为红黑树,因此元素在插入的过程中就实现了排序.那么到底哪一种排序速度更快呢? 下面有一个测试程序: 1 2 3 4 5 6 7 8 9 10 11 1…
stl:即标准模板库,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法 六大组件: 容器.迭代器.算法.仿函数.空间配置器.迭代适配器 迭代器:迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器.除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用.迭代器是STL中行为类似指针的设计模式,它可以提…
I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chinese necessarily. The differences between these containers are : The keys of set and map are unique, but they could be multiple for multiset and multimap…
A lot of interviewers like to ask the candidates the difference between set and multiset(map and multimap).What does multi actually mean?Multi-container could have duplicate element.Check the code below. /*********************************************…
目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以及清空元素 7.map中常用的函数 一丶关联容器map/multimap 容器 map容器跟以上的容器都不同,它是一个 表存储结构. 也就是存储表的一个结构. 存储的是 key-value的方式. 所以我们使用的需要执行key的方式,以及key对应的value 它底层的实现结构也是key value…
http://blog.163.com/zhoumhan_0351/blog/static/399542272010225104536463 Vector 像一个快速的数组,其具有数组的快速索引方式.还具有动态地进行扩展. Vector 的特点 1.索引和迭代器非常快,这个是结合了数组的特点,其低层就是一个指针动态分配的数组. 2.当数组容量不够时,它的操作是这样的. ⑴.分配一个更大的连续存储区 ⑵.将旧内存中的东西拷贝到新内存中去. ⑶.销毁旧内存中的对象 ⑷.释放旧内存. 那么对于复杂的对…
(为什么一个是8一个是6:防止频繁来回转换小消耗性能) 这是笔者面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼.因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作.笔者第一反应也是一样,只能初略的猜测是因为时间和空间的权衡. 要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升到O(log(n)).当链表长度很小的时候,即使遍历…
前言 一段程序最容易出错的就是在判断或者是情况分类的边界地方,所以,应该对于许多判断或者是情况分类的边界要格外的注意.下面,就分析下STL中红黑树的迭代器的各种边界情况.(注意:分析中STL使用的版本是SGI STL,由于不同的版本的STL具体实现细节不一样,所以可能会有出入). 一.begin()获取第一个迭代器的自减 begin()函数获取的是一个容器的首迭代器,指向容器中的第一个元素(这里的第一个不一定是指储存顺序(物理)上的第一个,一般是指逻辑上的第一个,在红黑树中是指树中的最左节点).…
这是笔者一个好友面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼.因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作.笔者第一反应也是一样,只能初略的猜测是因为时间和空间的权衡. 要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升到O(log(n)).当链表长度很小的时候,即使遍历,速度也非常快,但是当链表长度不断变长,肯定会对…
AVL树(http://baike.baidu.com/view/593144.htm?fr=aladdin),又称(严格)高度平衡的二叉搜索树.其他的平衡树还有:红黑树.Treap.伸展树.SBT. 注:使用 "nil 叶子"或"空(null)叶子",它不包含数据而只充当树在此结束的指示.这些节点在绘图中经常被省略,导致了这些树好象同上述原则相矛盾,而实际上不是这样.与此有关的结论是所有节点都有两个子节点,尽管其中的一个或两个可能是空叶子. 红黑树(http://…