C 中 set,multiset,map,multimap 关联容器实例教程
测试环境:windows 7 vs2010
内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。
除了各容器都有的函数外,还支持以下成员函数:
find: 查找等于某个值的元素(x小于y和y小于x同时不成立即为相等)
lower_bound: 查找某个下界
upper_bound: 查找某个上界
equal_range: 同时查找上界和下界
count:计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等)
insert: 用以插入一个元素或一个区间
在学习关联容器之前,我们先要学习pair模板,pair模板是struct形式,因此其内部成员默认都是公有的。
值得强调的是map/multimap容器中存放的都是pair对象,且按照first成员变量从小到大排序的。
第三个构造函数实例
下面看下set和multiset(set和multiset区别在set不允许有重复的key值)
Pred类型的变量决定了multiset中的元素,“一个比另一个小”是怎么定义的。multiset运行过程中,比较两个元素x,y的大小的做法,就是生成一个Pred类型的变量,假定为op,若表达式op(x,y) 返回值为true,则x比y小。
Pred的缺省类型是less<Key>。
//less模板是靠< 来比较大小的 ,因此当key为类时候,则该类必须重载运算符
map/multimap里放着的都是pair模版类的对象,且按first从小到大排序,其中map中key不允许重复。
multimap中的元素由<关键字,值>组成,每个元素是一个pair对象,关键字就是first成员变量,其类型是Key
multimap中允许多个元素的关键字相同。元素按照first成员变量从小到大排列,缺省情况下用less<Key>定义关键字的“小于”关系。
关联容器:set multiset map multimap比较
一、
1)set 只能是单一的值,它是存储不重复的元素,不能有两个相同的元素,可以 用pair<set<int>::iterator,bool> ret;键值对来判断是否两个元素是否一样;
用if (ret.second==false) it=ret.first;可以判断是否失败;用*(ret.fisrt)可以得到相同的值。
2)set的元素值是它的键值本身。而map是有key 和 value
3)set都会对元素进行有序的排序。
二、
1)multiset 可以储存相同的元素.
2)insert返回的是迭代器。
3)其他同set
三、
1)map储存元素是有格式的key和value值。map是一种特殊的set,它的所有元素都是pair<key,value>map最大的特性在于map提供了下标subscript操作的能力,你可以向数组一样操作map[key]来引用相应的值。
2)可以根据key找到关键字。几乎所有针对map的操作都是基于key的。比如,排序就是通过比较key来进行的。
3)用树形结构储存,所以查找时间短。
4)key是唯一不同步。每一个元素都有一个键值对。
5)也是有序的。
四、
multimap特点; map不能有重复的键值对,即如果插入键相同的键值对,则将覆盖掉同键值的键值对。
multimap则不会覆盖。
您可能感兴趣的文章:
C 中 set,multiset,map,multimap 关联容器实例教程
golang map中结构体元素是无法取地址的
Golang线程安全Map:sync.Map使用小结
golang:map
golang 并发访问map遇到的问题
Golang从入门到放弃200618--Map(1)Map的初始化和基本操作
Golang Study 三 map的顺序输出
golang key map 所有_Golang:map的比较-Go语言中文社区
golang map key 正则表达_Golang中的Map
由浅入深聊聊Golang的map