STL容器分析--map】的更多相关文章

映射和多重映射基于某一类型Key的键集的存在,提供对T类型的数据进行快速和高效的检索.…
STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入的顺序无关.如果是int/double等数值型为key,那么就按照大小排列:如果是string类型,那么就按照字符串的字典序进行排列~ (还记得之前说过的字典序吗?当时我们用到了next_permutation这个库函数!)下面我们展示一个例子,说明map中默认按照key升序排列 的情况. Exam…
1. 容器(Map & multimap)的插入 map.insert(...);    //往容器插入元素,返回pair<iterator,bool> map中插入元素的四种方式: 1 #include <iostream> 2 #include <map> 3 4 using namespace std; 5 6 int main() 7 { 8 map<int, string> mapStu; 9 10 //方法一: 构造一个 pair 然后插…
STL 对这个序列可以进行查找,插入删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效.而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的.这在收集一个数据的具体值的时候是有用的.集合中的元素按一定的顺序排列,并被作为集合中的实例.一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢.具体实现采用了红黑树的平衡二…
deque,故名思义,双向队列.可以在头尾进行插入删除. 而STL中采用了链表+线性表的数据结构来实现deque,因而除了满足双向队列的特点以外,还支持随机访问. 下面,贴一段代码. 总览:双向队列是由链式线性表+顺序线性表组成.支持随机访问 首先看下定义:   template >       class deque : protected _Deque_base 可知,需先分析_Deque_base   template         class _Deque_base {        …
map.find(key);   //查找键key是否存在,若存在,返回该键的元素的迭代器:若不存在,返回map.end(); map.count(key);   //返回容器中键值为key的对组个数.对map来说,要么是0,要么是1;对multimap来说,值>=0. map.lower_bound(keyElem);  //返回第一个key>=keyElem元素的迭代器. map.upper_bound(keyElem);    //  返回第一个key>keyElem元素的迭代器.…
Map & multimap 的删除 map.clear();           //删除所有元素 map.erase(pos);      //删除pos迭代器所指的元素,返回下一个元素的迭代器. map.erase(beg,end);//删除区间[beg,end)的所有元素  ,返回下一个元素的迭代器. map.erase(key);     //删除容器中key为key的对组,返回删除的对组个数 1. clear() 删除所有元素示例: 1 #include <iostream>…
1. Map & multimap 的大小 map.size();     //返回容器中元素的数目 map.empty();//判断容器是否为空, 容器中有内容将会返回 false 代码示例: 1 #include <iostream> 2 #include <map> 3 4 using namespace std; 5 6 int main() 7 { 8 map<int, string> mapStu1; 9 if (!mapStu1.empty())…
1. Map & multimap 的拷贝构造与赋值 map(const map &mp);               //拷贝构造函数 map& operator=(const map &mp);       //重载等号操作符 map.swap(mp);                           //交换两个集合容器 拷贝构造代码示例: 1 #include <iostream> 2 #include <map> 3 4 using…
1. Map & multimap 的排序与遍历 map<T1,T2,less<T1> >  mapA; //该容器是按键的升序方式排列元素.如果未指定less<T1> 函数对象,默认采用less<T1>函数对象. map<T1,T2,greater<T1>> mapB; //该容器是按键的降序方式排列元素. less<T1> 与 greater<T1>  可以替换成其它的函数对象functor. 可编…
1. map/multimap 的简介 map 是标准的关联式容器,一个 map 里存储的元素是一个键值对序列,叫做 (key,value) 键值对.它提供基于 key 快速检索数据的能力. map 中 key 值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. map 底层的具体实现是采用红黑树变体的平衡二叉树的数据结构.在插入操作.删除和检索操作上比 vector 快很多. map 可以直接存取 key 所对应的 value,支持[]操作符,如 m…
stack,顾名思义,表示栈,先进后出.…
queue,顾名思义,是指队列.满足先进先出的原则.…
就是一双向链表,可高效地进行插入删除元素.…
vector是一种动态数组,是基本数组的类模板. vector,支持随机访问.在数据结构上,属于顺序线性表. 而且,由于是动态数组,…
STL提供了4个关联容器:set.multiset.map和multimap.这些容器提供了通过keyword高速存储和訪问数据元素的能力.Set和map不同意有反复keyword,而multiset和multimap同意反复keyword.关联容器的几个共同函数例如以下: find(key):搜索容器中具有指定keyword的元素,返回指向此元素的迭代器. lower_bound(key):搜索容器中具有指定keyword的第一个元素.返回指向此元素的迭代器. upper_bound(key)…
连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效,因为它们使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置,保证元素的连续性.当上述容器的erase方法可以返回下一个有效的iterator,即erase方法的返回的iterator指向紧接在被删除元素之后的元素的有效迭代器,因此,可以根据这个返回值继续访问后面的元素. 连续内存…
STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map 不允许key重复,而multiSet 允许key重复 头文件 #include< map > 构造函数及析构函数 非变动性操作函数 运算符重载 下标运算符 查找操作函数 赋值操作 迭代器操作 插入删除操作 范例如下 #include <iostream> #include <m…
Map的常见函数 Map的实现机制 STL中的Map底层实现机制是RB树(红-黑树)…
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的表项(当然这个函数是应该运行在另起一个线程上的),但是在按照下面的方法对hash_map(用迭代器)遍历删除时,当找到第一个满足删除条件的元素并将其删除后,程序将提示非法: for(list<int>::iterator iter = m_map.begin(); iter != m_map.en…
最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用. 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器: 这里说的STL容器,但主要则是指容器,字符串类,但其实可以推广到在STL中提供的任何类型,这里说的公共接口,是指需要暴露给客户的sdk头文件,包括函数签名,或者类成员变量:也可以说,不要在暴露给客户的头文件中包含STL的头文件. 原因分析为什么有这个结论,我们可以从几个方面来论述: 客户端使用的STL版本可能不同因为STL作为标准库…
最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: 实现描述: 容器 描述 vector 向量,一个有着N个或更多连续存储的元素的数组. list 列表,一个由节点组成的双向链表,每个节点中包含一个元素. deque 双队列,一个有着N个或更多连续存储的指向不同元素的指针组成的数组. set 集合,一个由节点组成的红/黑树,每个节点包含一个元素,节点…
1.为什么要出现? 依照默认认定.一个模板给出了一个单一的定义,能够用于用户能够想到的不论什么模板參数!可是对于写模板的人而言,这样的方式并不灵活.特别是遇到模板參数为指针时,若想实现与类型的參量不一样的实例化.就变得不太可能了!也有时.想禁止此种同样的实例化变得不太可能! 故而出现了,Partial Specialization! 同一时候,在使用void*指针时.能够最大限度的共享代码,降低代码的膨胀! 2.它是什么?事实上,就是用户定义的偏特化.用template<>来说明这是一个偏特化…
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时,需要注意一些问题.   1.list,set,map容器 在使用 list.set 或 map遍历删除某些元素时可以这样使用:   1.1 正确写法1 1 std::list< int> List; 2 std::list< int>::iterator itList; 3 for(…
数据结构逆向分析-Map map是一个典型的二叉树结构,准确的来说是一个平衡二叉树或者红黑树,特点是数据存储是有序的存储. 参考侯杰老师的stl源码剖析,map里面采用的是RB-TREE也就是红黑树 map存储的数据是以键值对的形式来存储的,Key:Value 优势:查找数据效率高,因为是平衡二叉树 缺点:插入数据效率低,因为要插入后变成平衡二叉树. 开始分析: 采用比较简单的代码: #include<map>using std::map;using std::pair;​int main()…
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector<struct> mFriendList;...std::vector<struct>::iterator iter = mFriendList.begin();for ( ; iter != mFriendList.end(); ++iter){    if (...)        mFr…
 转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; mso-bidi-font-family:"times new roman"; mso-bidi-theme-font:minor-bidi;} @page {mso-page-border-surround-header:no; mso-page-border-surround-foote…
1.1 STL map 1.1.1 背景 关联容器使用键(key)来存储访问读取元素,而顺序容器则通过元素在容器中的位置存储和访问元素. 常见的顺序容器有:vector.list.deque.stack.queue.priority_queue. 常见的关联容器:map.set.multimap.multiset 1.1.2 提前知识 标准库定义简单的数据对类型pair,有如下接口: 该接口在头文件 utility.h   pair提供的操作 pair <T1,T2> p1; 创建一个空的pa…
技术不只是我的工作,也是我的生活,以后的博客中会穿插一些个人的喜悦.愤怒或者感悟,希望大家能够接受. 我所有的一切,比我技术更好的怕是我的脸皮了,昨天收到京东面试没有通过的消息,喊了几句“我好悲伤啊”就又能够继续我的生活了.呵呵,我不喜欢批判,但总是能看到自己的不足,好吧,这是一个痛并快乐的过程,我要造作的喊“悲伤”,我想放纵让亲友安慰我,我也要悄悄的学习,只为证明:我也很强,以后会更强. 在京东面试之后,对程序有了一点感触:数据结构和算法之间,一个程序员首先要考虑最合适的数据模型,之后才是算法…
STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector                             行为类似于数组,但可以根据要求自动增长. 它可以随机访问.连续存储,长度也非常灵活. deque                             容器支持在容器的起点和终点进行快速插入和删除. 它享有 vector 随机访问和长度灵活的优点,但是不具备连续性. list                          …