STL容器Maps和Multimaps使用

本文介绍了C++ STL中的Maps和Multimaps容器,包括它们的基本概念、元素类型要求、构造与析构函数、非变动性操作、搜寻操作、赋值操作、迭代器操作、安插和删除操作及存取操作等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL容器Maps和Multimaps使用

简介

map和multimap将key/value pair(键值/实值 对组)当做元素,进行管理。他们可根据key的排序准则自动将元素排序。multimaps允许重复元素,maps不允许。

map和multimap的元素型别key和T,必须满足以下两个条件:

key/value必须具备assignable(可赋值的)和copyable(可复制的)性质。
对排序准则而言,key必须是comparable(可比较的)。

操作函数

  • 构造和析构函数

map c:产生一个空的map/multimap,其中不含任何元素
map c(op):以op为排序准则,产生一个空的map/multimap
map c1(c2):产生某个map/multimap的副本,所有元素均被复制
map c(beg, end):以区间[beg; end]内的元素产生一个map/multimap
map c(beg, end, op):以op为操作准则,利用[beg; end]内的元素生成一个map/multimap
c.~map():销毁所有元素,释放内存
map< Key, Elem >:一个map,以less<>(operator<)为排序准则
map< Key, Elem, Op >:一个map,以op为排序准则
multimap< Key, Elem >:一个multimap,以less<>(operator<)为排序准则
multimap< Key, Elem, Op >:一个multimap,以op为排序准则

  • 非变动性操作

c.size():返回容器的大小
c.empty():判断容器大小是否为零。等同于size()==0,但可能更快
c.max_size():返回可容纳的最大元素数量
c1 == c2:判断是否c1等于c2
c1 != c2:判断是否c1不等于c2.等同于!(c1 == c2)
c1 < c2:判断是否c1小于c2
c1 > c2:判断是否c1大于c2.等同于c2 < c1。
c1 <= c2:判断是否c1小于等于c2。等同于!(c2 < c1)
c1 >= c2:判断是否c1大于等于c2。等同于!(c1 < c2)

  • 搜寻操作函数

count(key):返回“键值等于key”的元素个数
find(key):返回“键值等于key”的第一个元素,找不到就返回end()
lower_bound(key):返回“键值为key”之元素的第一个可安插位置,也就是“键值 >= key”的第一个元素位置
upper_bound(key):返回“键值为key”之元素的最后一个可安插位置,也就是“键值 > key”的第一个元素位置
equal_range(key):返回“键值为key”之元素的第一个可安插位置和最后一个可安插位置,也就是“键值==key”的元素区间

  • 赋值操作

c1 = c2:将c2中所有元素赋值给c1
c1.swap(c2):将c1和c2的元素互换
swap(c1, c2):将c1和c2的元素互换。此为全局函数

  • 迭代器操作

c.begin():返回一个双向迭代器(key被视为常数),指向第一个元素
c.end():返回一个双向迭代器(可以被视为常数),指向最后元素的下一个位置
c.rbegin():返回一个逆向迭代器,指向遍历时的第一个元素
c.rend():返回一个逆向迭代器,指向逆向遍历时的最后元素的下一个位置

  • 安插和删除操作

c.insert(elem):安插一份elem副本,返回新元素位置(不论是否成功——对maps而言)
c.insert(pos, elem):安插一份elem副本,返回新元素位置(pos是个提示,指出安插操作的搜寻起点。如果提示恰当,可大大加快速度)
c.insert(beg, end):将区间[beg; end]内所有元素的副本安插到c(无返回值)
c.erase(elem):移除“实值(value)与elem相等”的所有元素,返回被移除的元素个数
c.erase(pos):移除迭代器pos所指位置上的元素,无返回值
c.erase(beg, end):移除区间[beg; end]内的所有元素,无返回值
c.clear():返回全部元素,将整个容器清空

  • 存取操作

m[key]:返回一个reference,指向键值为key的元素。如果该元素尚未存在,就安插该元素

参考文献:C++标准库,STL源码分析

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值