(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()      将容器清空
 

STL中的map和multimap小结的更多相关文章

  1. STL 中的map 与 hash_map的理解

    可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...

  2. STL中的map和unordered_map

    STL中的map和unordered_map map 头文件:#include 原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素 ...

  3. STL中关于map和set的四个问题?

    STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 为何map和set的插入删除效率比用其他序列容器高? 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构. ...

  4. STL中的map和hash_map

    以下全部copy于:http://blog.chinaunix.net/uid-26548237-id-3800125.html 在网上看到有关STL中hash_map的文章,以及一些其他关于STL ...

  5. C++ STL中的map用红黑树实现,搜索效率是O(lgN),为什么不像python一样用散列表从而获得常数级搜索效率呢?

    C++ STL中的标准规定: map, 有序 unordered_map,无序,这个就是用散列表实现 谈谈hashmap和map的区别,我们知道hashmap是平均O(1),map是平均O(lnN)的 ...

  6. STL中的map、unordered_map、hash_map

    转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于 ...

  7. STL中的map/multimap小结

    (1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)n ...

  8. stl中的map数据类型

    1.1 STL map 1.1.1 背景 关联容器使用键(key)来存储访问读取元素,而顺序容器则通过元素在容器中的位置存储和访问元素. 常见的顺序容器有:vector.list.deque.stac ...

  9. stl中的map经验

    如果想使用一个map临时变量装载参数map,不需要使用new创建一个对象. 声明一个变量,直接赋值就可以.map内部自己重载了=操作符,会自己分配内存.

随机推荐

  1. Android Studio "cannot resolve symbol R" 问题

    初接触Android Studio,又遇到了 "cannot resolve symbol R"问题(以前在 Eclipse 也遇到过),网上方法不一,后来在stackoverfl ...

  2. 【iOS】获取项目名和版本号

    iOS 开发中,有时候需要获取项目名和版本号,示例代码如下: -(void)getProjectNameAndVersion{ appName = [[[NSBundle mainBundle] in ...

  3. superset安装文档

    1 安装python3.6 yum install epel-release -y yum install https://centos7.iuscommunity.org/ius-release.r ...

  4. JDK的命令行工具系列 (三) jhat、jstack

    jhat: heapdump文件分析工具 在前两篇系列文章JDK的命令行工具系列 (一) jps.jstat.JDK的命令行工具系列 (二) javap.jinfo.jmap中, 我们已经介绍过了jp ...

  5. win10教育版激活错误:在运行 Microsoft Windows 非核心版本的计算机上,运行"slui.exe ...”

    折腾了一天,最终轻松解决,先启用Software Protection服务,在激活(密钥或者工具都行). PS:但是这样还是无法解决Software Protection自动停止的问题,这个可以参考网 ...

  6. 利用Idea重构功能及Java8语法特性——优化深层嵌套代码

    当遇到深层嵌套代码,如for,if,lambda表达式或内部类及这些代码的组合,这时我们可以通过Java 8的语法特性来进行优化. 下面的代码是一个嵌套循环的示例. public MappedFiel ...

  7. Android 虹软人脸识别SDK-人脸对比

    准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY: https://ai.arcsoft.com.cn/ucenter/resource/build/in ...

  8. Java爬虫框架 | 爬小说

    Jsoup,Java爬虫解决方案,中文文档:jsoup   不得不说Java的生态真的好,原来我以为爬虫是只能用Pyhton来写的,结果发现Java的爬虫框架不要太多……       一分钟你就可以写 ...

  9. Hyper-V虚拟机上安装Ubuntu16.04/Ubuntu18.04.2LTS,搭建GitLab

    我的电脑系统是win10,内存8g如下 一开始是装的Ubuntu18.04.2LTS, gitlab-ce_12.1.3-ce.0_amd64.deb,每次能够安装成功,但是修改完ip后,运行gitl ...

  10. 【Java例题】3.5 级数之和

    5. 计算级数之和: y=3*1!/1-3^2*2!/2^2+3^3*3!/3^3-...+ (-1)^(n-1)*3^n*n!/n^n. 这里的"^"表示乘方,"!&q ...