STL容器: Maps, Multimaps
STL
简介
二者是 key:value 类型, 可根据key的排序准则自动元素排序。Multimap允许重复元素, map不允许。
namespace std{
template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key, T>>>
class map;
template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key, T>>>
class multimap;
- key, value 都必须是copyable 或 movable
- 对指定的排序准则而言, key必须是comparable
- 元素的次序由11key决定,与value无关
原理
- map. multimap 通常以平衡二叉树完成。
创建,复制,销毁操作
操作 |
说明 |
`#include |
|
map c; |
创建一个空map, 不含任何元素 |
map c(op); |
建立一个空map, 以op为排序准则 |
map c(c2); |
Copy 构造函数, 所有元素均被复制 |
map c = c2; |
与上一个等价。 |
map c(rv); |
|
map c = rv; |
|
map c(beg, end); |
以区间[beg,end) 内的元素为初值,建立一个map |
map c(beg, end, op); |
以区间[beg,end) 内的元素为初值,并以op为排序准则,建立一个map |
map c(initlist); |
建立一个map, 以初始值initlist的元素为初值 |
map c = initlist; |
同上 |
c.~map(); |
销毁所有元素,释放内存 |
map 形式 |
效果 |
map |
以less为排序准则 |
map |
以op为排序准则 |
比较操作
两个容器的key, value, 排序准则都必须相同才能比较,否则编译期会发生类型错误
操作 |
说明 |
c.key_comp() |
返回 “比较准则” |
c.value_comp() |
返回针对value 的比较准则 |
c.empty() |
返回是否为空 |
c.size() |
返回当前元素个数 |
c.max_size() |
返回元素个数之最大可能量 |
c1 == c2 |
|
c1 != c2 |
|
c1 < c2 |
|
c1 > c2 |
|
c1 <= c2 |
|
c1 >= c2 |
|
查找操作
操作 |
说明 |
c.count(val) |
返回 key 为 val 的元素个数 |
c.find(val) |
返回key为val 的第一个元素,找不到返回end() |
c.lower_bound(val) |
返回 key>=val 的第一个元素位置 |
c.upper_bound(val) |
返回 key > val 的第一个元素位置 |
c.equal_range(val) |
返回 key == val 的元素区间 |
赋值操作
操作 |
说明 |
c = c2 |
将c2的全部元素赋值给c |
c = rv
c = initlist |
c1.swap(c2) | 置换c1和c2的数据
swap(c1, c2) | 置换c1和c2的数据
访问操作
迭代器操作
操作 |
说明 |
c.begin() |
返回一个 bidirectional iterator 指向第一个元素 |
c.end() |
返回一个 bidirectional iterator 指向最末元素的下一个位置 |
c.cbegin() |
返回一个 const bidirectional iterator 指向第一个元素 |
c.cend() |
返回一个 const bidirectional iterator 指向最末元素的下一个位置 |
c.rbegin() |
返回一个反向 iterator 指向反向迭代的第一个元素 |
c.rend() |
返回一个反向iterator 指向反向迭代的最末元素的下一个位置 |
c.crbegin() |
返回一个 const 反向 iterator 指向反向迭代的第一个元素 |
c.crend() |
返回一个 const 反向iterator 指向反向迭代的最末元素的下一个位置 |
插入与删除
操作 |
说明 |
c.insert(val) |
插入一个val,返回新元素位置 |
c.insert(pos, val) |
插入一个val,返回新元素位置。 pos是一个提示,表示插入动作的查找起点,提示恰当可以加快速度 |
c.insert(beg, end) |
将区间 [beg, end) 内所有元素插入到c, 无返回值 |
c.insert(initlist) |
插入initlist内所有元素,无返回值 |
c.emplace(args...) |
|
c.emplace_hint(pos,args...) |
|
c.erase(val) |
移除 与val相等 的所有元素, 返回被移除的元素的个数 |
c.erase(pos) |
移除iterator位置pos上的元素,无返回值 |
c.erase(beg, end) |
移除区间[beg,end) 内的所有元素,无返回值 |
c.clear() |
移除所有元素,将元素清空 |