STL中的map/multimap小结
(1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成
(2)namespace std{
template <class key, class T, class Compare = less<key>,
class Allocator = allocator<pair<const key, T> > >
class map;
template <class key, class T, class Compare = less<key>,
class Allocator = allocator<pair<const key, T> > >
class multimap;
}
第一个template参数被当作元素的key,第二个当作元素的value。key/value必须具备assignable和copyable性质,对排序而言key必须是comparable。第三个参数为排序准则,和map/multimap一样这个排序准则必须是strict weak ordering的,元素的次序由他们的key决定,和value无关,map/multimap根据元素的key自动对元素进行排序。
(3)map/multimap的操作函数:
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可为下列形式:map<Key, Elem>、map<Key, Elem, op>、multimap<Key, Elem>、multimap<Key, Elem, op>
c.size() 返回当前的元素数量
c.empty() 判断c是否为空
c.max_size() 返回可容纳的元素最大数值
c1 compare c2 compare可为==,!=,<,>,<=和>=
c.count(elem) 返回“键值等于key”的元素个数
c.find(elem) 返回“键值等于key”的第一个元素的迭代器,如果找不到就返回end()
c.lower_bound(key) 返回“键值为key”之元素的第一个可安插位置,也就是“键值>=key”的第一个元素位置
c.upper_bound(key) 返回“键值为key”之元素的最后一个可安插位置,也就是“键值>key”的第一个元素位置
c.equal_range(key) 返回“键值为key”之元素的第一个和最后一个可安插位置,也就是“键值==key”的元素区间
lower_bound()、upper_bound()和equal_range()行为与set相应的函数十分相似,唯一不同的是:元素是一个key/value pair。
c1 = c2 将c2全部元素赋值给c1
c1.swap(c2) 将c1和c2元素互换
c.begin() 返回一个双向存取迭代器(将key视为常数),指向第一个元素
c.end() 返回一个双向存取迭代器(将key视为常数),指向最后元素的下一个位置
c.rbegin() 返回一个逆向迭代器,指向逆向迭代的第一个元素
c.rend() 返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置
这里的元素是一个key/value pair(pair<const key, T>)。
c.insert(elem) 插入一个elem副本并返回新元素的位置
c.insert(it, elem) 安插elem副本返回新元素的位置(it是一个提示指出安插操作的搜寻起点)
c.insert(beg, end) 插入区间[beg, end)内的所有元素副本,无返回值
c.erase(elem) 移除“value与elem相等”的所有元素,返回被移除元素的个数
c.erase(it) 移除it位置上的元素,无返回
c.erase(beg, end) 移除[beg, end)区间内的所有元素,无返回
c.clear() 将容器清空
这里的元素是一个key/value pair(pair<const key, T>)。
STL中的map/multimap小结的更多相关文章
- STL 中的map 与 hash_map的理解
可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...
- STL中的map和unordered_map
STL中的map和unordered_map map 头文件:#include 原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素 ...
- STL中的map和multimap小结
(1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 ( ...
- STL中关于map和set的四个问题?
STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 为何map和set的插入删除效率比用其他序列容器高? 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构. ...
- STL中的map和hash_map
以下全部copy于:http://blog.chinaunix.net/uid-26548237-id-3800125.html 在网上看到有关STL中hash_map的文章,以及一些其他关于STL ...
- C++ STL中的map用红黑树实现,搜索效率是O(lgN),为什么不像python一样用散列表从而获得常数级搜索效率呢?
C++ STL中的标准规定: map, 有序 unordered_map,无序,这个就是用散列表实现 谈谈hashmap和map的区别,我们知道hashmap是平均O(1),map是平均O(lnN)的 ...
- STL中的map、unordered_map、hash_map
转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于 ...
- STL之六:map/multimap用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap 使用map/multimap之前要加入头文件# ...
- STL——容器(Map & multimap)的删除
Map & multimap 的删除 map.clear(); //删除所有元素 map.erase(pos); //删除pos迭代器所指的元素,返回下一个元素的 ...
随机推荐
- Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)
在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方 ...
- 巧用在线html编辑器,保存文章到数据库(带html标签)
1.对于读取数据库的文章字段刷新到web页面,如何使文章格式很好的显示出来,那么数据库应存text格式,并记录文章的个数(转换为html): 2.如何转换html格式,可以使文章从word直接粘贴到在 ...
- raspberry pi 如何汉化显示中文
1 树莓派初装系统之后,首次启动会出现“raspi-config”工具,如下图:(若不是初次启动,在命令模式下,请输入 sudo raspi-config 命令,即可调出此界面.若在图形桌面下,打开桌 ...
- 部分设备在微信内无法播放audio的解决方案
临时接到一个紧急的需求,一个活动页面,在某台iPhone 5S设备上无法播放音频,其它设备均正常.我接到这个任务时,也是一脸懵逼,试过在audio标签上添加controls属性来显示audio,结果发 ...
- SqlServer将没有log文件的数据库文件附加到服务器中
今天搞了一件很让我不爽的事情,一不小心把一个40多G的数据库日志文件删除,而且在删除之前我又搞了个日志进去,死活附加不了到服务器上去一直提示多个日志不能自动创建,白白浪费了我一个晚上的时间,后来不断的 ...
- 那些在学习iOS开发前就应该知道的事(part 1)
英文原文:Things I wish I had known before starting iOS development—Part 1 http://www.cocoachina.com/ios/ ...
- 机器学习编程语言之争,Python 夺魁【转载+整理】
原文地址 en cn 本文内容 表现平平的 MATLAB 貌似强大的 Julia 本身无错的 R 语言 逐渐没落的 Perl 老而弥坚的 Python 我个人很喜欢 Python~ 随着科技的发展,拥 ...
- Centos 7防火墙firewalld开放80端口
开启80端口 1.firewall-cmd --zone=public --add-port=80/tcp --permanent 出现success表明添加成功 命令含义: --zone #作用域 ...
- BitNami 里有好多开源软件
https://bitnami.com/stacks BitNami 提供wordpress.joomla.drupal.bbpress等开源程序的傻瓜式安装包下载,所有的安装包内置了服务器环境,就是 ...
- 纯CSS实现图片抖动
实现方法: 1.将上文提到的以下JS内容删除: $(".imagelogo").mouseover(function() { obj = $(this); i = 5; timer ...