STL:map/multimap用法详解
map/multimap
使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。
map和multimap内部的数据结构也是平衡二叉树。
map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。
常用函数
1.构造函数和析构函数
map m:创建空映射,不包含任何元素
map m(op):以op为排序准则,产生一个空的map
map m1(m2):复制c2中的元素到c1中
map m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射
map m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射。
m.~set()销毁所有元素,释放内存
multimap mm:创建空映射,不包含任何元素
multimap mm(op):以op为排序准则,产生一个空的multimap
multimap m1(m2):复制m2中的元素到m1中
multimap m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射
multimap m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射
m.~multimap()销毁所有元素,释放内存
- #include "stdafx.h"
- #include <iostream>
- #include <map>
- using namespace std;
- bool fncomp (char lhs, char rhs) {return lhs<rhs;}
- struct classcomp {
- bool operator() (const char& lhs, const char& rhs) const
- {return lhs<rhs;}
- };
- int main ()
- {
- map<char,int> first;
- first['a']=10;
- first['b']=30;
- first['c']=50;
- first['d']=70;
- map<char,int> second (first.begin(),first.end());
- map<char,int> third (second);
- map<char,int,classcomp> fourth; // class as Compare
- bool(*fn_pt)(char,char) = fncomp;
- map<char,int,bool(*)(char,char)> fifth (fn_pt); // function pointer as Compare
- return 0;
- }
2.大小、判断空函数
int size() const:返回容器元素个数
bool empty() const:判断容器是否空,若返回true,表明容器已空。
3.增加删除函数
iterator insert(const value_type& x):插入元素x
iterator insert(iterator it,const value_type& x):在迭代指针it处插入元素x
void insert(const value_type *first,const value_type* last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
size_type erase(const Key& key):删除键值等于key的元素
- #include "stdafx.h"
- #include <iostream>
- #include <map>
- using namespace std;
- int main ()
- {
- map<char,int> mymap;
- mymap.insert(pair<char,int>('a',10));
- mymap.insert(pair<char,int>('z',200));
- pair<map<char,int>::iterator,bool> ret;
- ret = mymap.insert(pair<char,int>('z',500));
- if (ret.second == false)
- {
- cout<<"element 'z' already existed";
- cout<<"with a value of "<<ret.first->second<<'\n';
- }
- map<char,int>::iterator it = mymap.begin();
- mymap.insert(it,pair<char,int>('b',300));
- mymap.insert(it,pair<char,int>('c',400));
- map<char,int> anothermap;
- anothermap.insert(mymap.begin(),mymap.find('c'));
- cout<<"mymap contains :\n";
- for (it = mymap.begin();it!= mymap.end();it++)
- {
- cout<<it->first<<"=>"<<it->second<<'\n';
- }
- cout<<"anothermap contains :\n";
- for (it = anothermap.begin();it!= anothermap.end();it++)
- {
- cout<<it->first<<"=>"<<it->second<<'\n';
- }
- return 0;
- }
上述代码运行结果为
- #include "stdafx.h"
- #include <iostream>
- #include <map>
- using namespace std;
- int main ()
- {
- map<char,int> mymap;
- map<char,int>::iterator it;
- mymap['a'] = 10;
- mymap['b'] = 20;
- mymap['c'] = 30;
- mymap['d'] = 40;
- mymap['e'] = 50;
- mymap.insert(pair<char,int>('f',60));
- cout<<"initial mymap contains :\n";
- for (it = mymap.begin();it!= mymap.end();it++)
- {
- cout<<it->first<<"=>"<<it->second<<'\n';
- }
- it = mymap.find('b');
- mymap.erase(it);
- mymap.erase('c');
- it = mymap.find('e');
- mymap.erase(it,mymap.end());
- cout<<"now mymap contains :\n";
- for (it = mymap.begin();it!= mymap.end();it++)
- {
- cout<<it->first<<"=>"<<it->second<<'\n';
- }
- return 0;
- }
上述代码运行结果为:

如果想往map/multimap中修改一个映射的值,应先插入一个新映射,再把与修改的映射删除。
4.遍历函数
iterator begin():返回首元素的迭代器指针
iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针
reverse_iterator rend():返回首元素前一个位置的迭代器指针
5.操作函数
const_iterator lower_bound(const Key& key):返回键值大于等于key的迭代器指针
const_iterator upper_bound(const Key& key):返回键值大于key的迭代器指针
int count(const Key& key) const:返回键值等于key的元素的个数
pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中键值等于key的迭代指针[first, last)
const_iterator find(const Key& key) const:查找功能,返回键值等于key的迭代器指针
void swap(set& s):交换但映射元素
void swap(multiset& s):交换多映射元素
6.特殊函数
reference operator[](const Key& k):仅在但映射map类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。
STL:map/multimap用法详解的更多相关文章
- STL map 常见用法详解
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...
- STL之六:map/multimap用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap 使用map/multimap之前要加入头文件# ...
- 2.9 C++STL map/multimap容器详解
文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- js数组中foEach和map的用法详解 jq中的$.each和$.map
数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...
- STL pair 常见用法详解
<算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...
- STL stack 常见用法详解
<算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL queue 常见用法详解
<算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...
随机推荐
- TCP/IP学习笔记__mbuf
Socket发送和接收数据都是写入和读取mbuf(存储器缓存)来完成的.下面着重介绍下Sendto函数与mbuf的关系: 以UDP协议为例: 1.UDP的输出执行过程: UDP的输出执行过程 2.协议 ...
- Template Method 模板设计模式
什么是模板设计模式 对于不了解的模板设计模式的来说,可以认为如同古代的造纸术一样,纸所以成型,取决于用了模板的形状,形状又由镂空的木板组成,而你想要造什么纸,又取决于你使用什么材料. 上面提到了两个关 ...
- Radio Station
B. Radio Station time limit per test: 2 seconds memory limit per test: 256 megabytes input: standa ...
- Docker的Fig 项目
在你的应用里面添加一个 fig.yml 文件,并指定一些简单的内容,执行 fig up 它就能帮你快速建立起一个容器 快速搭建基于 Docker 的隔离开发环境 使用 Dockerfile 文件指定你 ...
- 推荐算法之用户推荐(UserCF)和物品推荐(ItemCF)对比
一.定义 UserCF:推荐那些和他有共同兴趣爱好的用户喜欢的物品 ItemCF:推荐那些和他之前喜欢的物品类似的物品 根据用户推荐重点是反应和用户兴趣相似的小群体的热点,根据物品推荐着重与用户过去的 ...
- Java第6次实验提纲(异常)
PTA与参考资料 题集:集合 异常实验文件 第1次实验 1.1 7-1 常用异常 如何进行强制转换 如何捕获多种类型的异常 1.2 7-2 使用异常机制处理异常输入 在哪里加catch 1.3 7-3 ...
- fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory
fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory ...
- Unity UGUI图文混排(七) -- 下划线
之前更新超链接的时候,忘了搭配实现一个下划线的功能,这篇文章就是来补上这一个功能,时间有点长,一方面没有很好的思路,一方面也没多少时间. 先在网上收集了一下下划线的实现操作,一种是在文本下再创建一个文 ...
- Cocoa中层(layer)坐标系的极简理解
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Cocoa层的坐标系一直理解的不清晰,现在把它整理总结一下: ...
- 看见的力量 – (II) 影响地图
本文转自台湾的李智桦老师的博客,原文地址 Impact Mapping 真是令人惊艳的可视化工具.等你看完这篇文章,你会爱上它的. 典故 继2011年6月Example of specificatio ...