[关闭]
@songying 2019-03-15T21:03:17.000000Z 字数 1990 阅读 1058

STL容器: Maps, Multimaps

STL


简介

二者是 key:value 类型, 可根据key的排序准则自动元素排序。Multimap允许重复元素, map不允许。

  1. namespace std{
  2. template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key, T>>>
  3. class map;
  4. template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key, T>>>
  5. class 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.at()
c[]

迭代器操作

操作 说明
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() 移除所有元素,将元素清空
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注