Map
哈希表,存储键值对。
检查Map中是否存在该键值可以用Map.find();如果找到会返回相应位置的iterator,没找到会返回Map.end()
因此可以使用另一种方法,map.count()。如果存在会返回1,不存在返回0。
此外,当直接map[i]而没有其他操作时,会调用值的数据类型的默认构造函数,这也可以用来做一个判断而不用其他函数操作。
例:
执行完第15行的时候,map会多出一个键值对,值的i==1。
Vector
数组,每次扩容时会申请空间并且把原来的数据复制过去。因此在vector中存储大数据时最好存储数据的指针,减少复制的开销。扩容机制也是对vector进行push_back和pop_back时iterator失效的原因。
emplace_back和push_back的区别
emplace_back在调用时,直接在容器末尾生成对象。
push_back先生成对象,再把对象拷贝到容器末尾。
Set
排好序的集合。默认升序排列。注意set.bigin()、set.end()是不检查是否为空的,会导致空指针访问
set<int> q; //以int型为例 默认按键值升序 set<int,greater<int>> p; //降序排列 int x; q.insert(x); //将x插入q中 q.erase(x); //删除q中的x元素,返回0或1,0表示set中不存在x q.clear(); //清空q q.empty(); //判断q是否为空,若是返回1,否则返回0 q.size(); //返回q中元素的个数 q.find(x); //在q中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end() q.lower_bound(x); //返回一个迭代器,指向第一个键值不小于x的元素 q.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素 q.rend(); //返回第一个元素的的前一个元素迭代器 q.begin(); //返回指向q中第一个元素的迭代器 q.end(); //返回指向q最后一个元素下一个位置的迭代器 q.rbegin(); //返回最后一个元素