STL之map和multimap总结

发布时间:2021-09-20 12:04:50

STL之map和multimap总结





map和multimap都是有序关联容器,所有元素都会根据元素的键值自动被排序,包含具有
唯一键的键值对。键使用比较函数Compare比较来进行排序。搜索,删除和插入操作具有
对数复杂性。map和multimap通常实现为红黑树。multimap相对map来说能够允许重复值的存在。




1.构造、复制与析构



map c //默认构造函数;创建一个空map/multimap

map c(op) //创建一个空map/multimap,并以op原则作为排序准则

map c(c2) //复制构造函数;创建一个新的map/multimap作为c2的副本(所有元素都被复制)

map c = c2 //复制构造函数;创建一个新的map作为c2的副本(所有元素都被复制)

map c(rv) //移动构造函数;使用右值对象rv创建一个新map/multimap

map c = rv //移动构造函数;使用右值对象rv创建一个新map/multimap

map c(beg,end) //创建一个map/multimap,并使用beg到end范围内的值进行初始化

map c(beg,end,op) //创建一个map/multimap,并使用beg到end范围内以op原则排序后的值进行初始化

map c(initlist) //创建一个map/multimap,并使用初始化列表进行初始化

map c = initlist //创建一个map/multimap,并使用初始化列表进行初始化

c.~map() //销毁所有元素并释放内存

在这里map可能是如下的一种:



map //以less<>为排序准则的map

map //以op为排序准则的map

multimap //以less<>为排序准则的multimap

multimap //以op为排序准则的multimap



2.非变动性操作



c.key_comp() //返回比较准则

c.value_comp() //返回对值比较的标准 (与key_comp()相同)

c.empty() //判断容器是否为空,与size()==0相同,但可能更快

c.size() //返回当前元素数量

c.max_size() //返回可容纳的元素最大数量

c1 == c2 //判断c1与c2是否相等

c1 != c2 //判断c1与c2是否不相等,等同于!(c1==c2)

c1 < c2 //判断c1是否小于c2

c1 > c2 //判断c1是否大于c2

c1 <= c2 //判断c1是否小于等于c2

c1 >= c2 //判断c1是否大于等于c2

3.特殊查询操作




c.count(key) //返回键值为key的元素个数

c.find(key) //返回第一个键值为key的位置,若没找到返回end()

c.lower_bound(key) //返回键值为key的第一个可插入的位置,也就是键值 >= key的第一个元素位置

c.upper_bound(key) //返回键值为key的最后一个可插入的位置,也就是键值 > key的第一个元素位置

c.equal_range(key) //返回键值为key的可插入的第一个位置和最后一个位置的区间,也就是键值 == key的元素区间

4.赋值




c = c2 //将c2所有元素赋值给c

c = rv //将右值对象rv的所有元素移动赋值给c

c = initlist //使用初始化列表进行赋值

c1.swap(c2) //交换c1和c2的数

swap(c1,c2) //交换c1和c2的数

5.迭代器相关函数




c.begin() //返回一个双向迭代器,指向第一个元素

c.end() //返回一个双向迭代器,指向最后一个元素

c.cbegin() //返回一个双向常迭代器,指向第一个元素

c.cend() //返回一个双向常迭代器,指向最后一个元素

c.rbegin() //返回一个逆向迭代器,指向逆向迭代的第一个元素

c.rend() //返回一个逆向迭代器,指向逆向迭代的最后一个元素

c.crbegin() //返回一个逆向常迭代器,指向逆向迭代的第一个元素

c.crend() //返回一个逆向常迭代器,指向逆向迭代的最后一个元素

6.插入和移除元素




c.insert(val) //插入一个val的副本,返回新元素位置(对map来说不论成功与否)

c.insert(pos,val) //插入一个val副本,返回新元素位置(pos应该是插入的搜寻起点)

c.insert(beg,end) //将范围beg到end的所有元素的副本插入到c(无返回值)

c.insert(initlist) //插入初始化列表的所有元素的副本(无返回值)

c.emplace(args...) //插入一个使用args初始化的元素副本,返回新元素位置(对map来说不论成功与否)

c.emplace_hint(pos,args...) //插入一个使用args初始化的元素副本,返回新元素位置(pos应该是插入的搜寻起点)

c.erase(val) //移除所有与val值相等的元素,并返移除的元素个数

c.erase(pos) //移除迭代器位置的元素,并返回下个元素的位置

c.erase(beg,end) //移除beg到end范围内的所有元素,并返回下个元素的位置

c.clear() //移除所以元素,清空容器

7.键值对转递




//使用value_type
std::map coll;

coll.insert(std::map::value_type("otto",22.3));

//使用pair<>
std::map coll;

coll.insert(std::pair("otto",22.3));

//使用make_pair()
std::map coll;

coll.insert(std::make_pair("otto",22.3));


当作关联数组使用



c[key] //返回一个指向键值为key的元素的引用,如果不存在就插入这个元素

c.at(key) //返回一个指向键值为key的元素的引用

8.实例




实例1:map集合的插入和遍历



#include
#include
#include
#include
#include
using namespace std;
/**
map集合的插入和遍历
*/
int main(){
map coll;
coll.insert(pair("1",12));
coll.insert(pair("2",10));
coll.insert(pair("3",11));
for(map::iterator it=coll.begin();it!=coll.end();it++){
int len=distance(coll.begin(),it);
printf("元素在集合中的位置=%d
",len);
pair p=*it;
printf("元素的值=%d
",p.second);
printf("元素的键=");
cout< printf("
");
}
return 0;
}










相关文档

  • 养殖鸽子协议书范文
  • matlab数细胞实验图片,【图片】mathematica中有像matlab中定义细胞,每个元都是矩阵的方法吗?_mathematica吧_百度贴吧...
  • 服装营销个人求职计划书范文
  • 『七月七日晴』我的世界不再是雨天
  • Windows10下远程控制树莓派raspberry系统教程(vnc方法)
  • Linux操作系统下,通过系统调用和库函数分别实现对文件的拷贝
  • 滴滴调度是什么意思
  • Vue.js devtool插件安装后无法使用,出现提示“vue.js not detected”的解决办法
  • tibble数据框
  • 新手进阶的一些基础摄影技巧
  • Spring Boot的三种启动方式
  • java技术文档_学习编写java类的技术文档 | 学步园
  • 2020年精选中秋节祝福QQ问候语23条
  • 2014年12月大学英语四级作文题目预测:支教
  • 消防员逛超市作文700字
  • 如何回应别人说你现实 回归理性 回应现实
  • 苹果app输入次数多限制怎么办
  • 2020年将新增哪10个职业人社部拟发布的10个新职业
  • 房屋租赁合同的范本2020年
  • 向往和平的宣传标语
  • 我的交通梦
  • 简述监管的目标及原则.
  • 关于草虫的村落教学工作反思
  • php邮局系统,webmail_3.2.0 T-dah是一个PHP开发的开源的通用企业邮局系统。该 采用POP3协议收邮件,可以配置使 Web Server 256万源代码下载- www.pudn.c...
  • 家庭蒸蛋糕的制作方法
  • 词语纯真的释义及造句
  • 一款开源蜜罐神器
  • 《机器学习》周志华--第5章神经网络。 笔记+习题
  • 白发脱发食补吃什么
  • 小黄车压金怎么退充值钱怎么退
  • 猜你喜欢

  • 企业实施公务用车改革情况的调查报告_考察报告.doc
  • (手机) - 中国家电网
  • 中国银杏乳液行业市场前景分析预测年度报告(目录)
  • 责任认定书交警一般是怎么划分的谢谢指点
  • The letter A in The Scarlet Letter
  • 黑龙江太阳果肥业有限公司企业信用报告-天眼查
  • 随机生成10条不重复长度为10以内的字符串,进行排序
  • 《管理信息系统》课程设计实验报告
  • 【优质部编】【精选】2019-2020部编版(人教版)六年级数学上册期中试卷1
  • 10Fab 4S服务品牌营销战略 七 (19)页.ppt
  • 室外桌椅品牌十大排行榜
  • 2016-2017学年高中数学苏教版必修4学案:1.2.3.1 三角函数的诱导公式(一~四) Word版含解析
  • 浅谈“五四”文学的思想意义
  • 2018年秋人教版七年级英语上册同步作业课件:Unit5 Do you have a soccer ball双休作业5 (共24张PPT)
  • 十一最佳的旅游地 海南旅游攻略
  • 优化教学设计,构建高效课堂
  • 世界最大的是什么狗
  • 查询倒序_MySQL8.0:倒序索引数据的数据排列方式
  • 关于爱国的短篇诗歌
  • 英语人教版九年级全册Unit7 Section A 1 (1a-2d)教学设计
  • 2019精选爱情励志语录经典
  • 2014-2015六年级数学上册期末测试题(北师大版)
  • 大学交互性教学理论与实践的研究 英语教学理论与实践
  • 【全国名校】黑龙江省哈尔滨市第三中学2018-2019学年高一下学期第一次阶段性测试生物试题(图片版)
  • 河南思泉汽车销售有限公司(企业信用报告)- 天眼查
  • 新中式风格分析ppt课件
  • 服装设计与工艺专业课程标准
  • 广东省湛江市2019中考英语模拟试题(1)
  • 夏天吃姜好吗?夏天吃姜有什么好处
  • 农业局践行科学发展观调研报告
  • 向家坝水电站岩石高边坡模糊数值分析
  • 华为nova5pro怎么矩形截屏
  • 护士职唱??鲋氨ǜ嫒??段
  • 维护眼睛健康的“极品”食物
  • 执法为民教育活动心得体会(消防)
  • 我们…… 初中作文【300字】
  • 桂林神手堂健康理疗康复中心(普通合伙)(企业信用报告)- 天眼查
  • 2013至2014学年第1学期(A卷参考答案与评分标准)
  • 高三自主招生自荐信
  • 98版五笔教程
  • 2012年初级会计职称考试《初级会计实务》单元测试题:第二章 负债
  • uc Java面试题
  • 电脑版