pair对组创建:pair<type,type> p(value1,value2);
pair<type,type> p = make_pair(value1,value2);
map
map中所有元素都是pair,第一个元素为key,第二个为value
所有元素会根据键值自动排序
也是基于红黑树实现,支持高效插入、查找和删除操作,复杂度都是O(logn)
,
可以根据key值快速找到value值
map和multimap区别:
-
map不允许容器中有重复key值元素
-
multimap允许容器中有重复key值元素
map构造赋值
-
map<T1,T2> map;
//map默认构造函数 -
map(const map &mp);
//拷贝构造函数 -
map& operator=(const map &mp);
//重载等号运算符
map大小和交换
统计map容器大小以及交换map容器
-
size();
//返回容器中元素的数目 -
empty();
//判断容器是否为空 -
swap(st);
//交换两个集合容器
插入删除
-
insert(elem);
//在容器中插入元素。 -
clear();
//清除所有元素 -
erase(pos);
//删除pos迭代器所指的元素,返回下一个元素的迭代器。 -
erase(beg, end);
//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 -
erase(key);
//删除容器中值为key的元素。
查找统计
-
find(key);
//查找key是否存在,若存在,返回该键的元素的迭代器;若是multimap,则是返回第一个满足的迭代器,若不存在,返回end(); -
count(key);
//统计key的元素个数
排序
map默认按照key值进行从小到达排序,使用仿函数可以进行自定义排序,规则与set类似
自定义类型则必须设置排序方式
map<Person, int, MyCompare> m;
unordered_map
基于哈希表实现 ,故在插入、删除和查找操作能在常数复杂度**O(1)**实现
也保持了键的唯一性,但不会根据键值自动排序
常用接口与map一致,同时遍历顺序下也是不一致的
适合于需要用于快速查找、删除和插入唯一元素,但不关心元素顺序的场景
性能注意事项:
- 当unordered_map元素数量增长超过哈希容量的负载因子时,哈希表将重新进行哈希操作,这可能会比较耗时,因此通常可以预先确定将要存储的元素数量进行reverse()方法来预分配足够的空间以提高效率