C++---map/multimap用法介绍
map
C++ STL中封装的一种关联式容器,里面存储的是键值对类型,在数据查询中效率较高。
什么是键值对
键值对是一种一一对应的关系,<key,value>
结构,第一个为关键字,第二个为关键字的值,例如:在词典中我们可以通过汉语,查具体的英文单词,查单词的操作就是一一对应的关系,<苹果,Apple>,苹果就相当于key,Apple就相当于value。
键值对的创建方法:pair<T1,T2> (key,value)
注意:一一对应,则表示key值唯一,由于map底层封装了搜索二叉树,所以对其进行遍历可得到有序数列
map的接口
构造
由于比较方式与配置器不需要给出,所以我们构造函数写起来就相对简单一点。
构造函数 | 接口 |
---|---|
map<T1,T2> m1 | T1为key的类型,T2为value的类型,其值可以不同 |
map<T1,T2> m2(m1) | 拷贝构造 |
map<T1,T2> m3 = m2 | 赋值构造 |
注意:map的拷贝构造与赋值构造是浅拷贝
迭代器
接口 | 接口说明 |
---|---|
begin | 返回第一个元素的位置 |
end | 返回最后一个元素的下一个位置 |
rbegin | 反向迭代器,返回最后一个元素的下一个位置 |
rend | 反向迭代器,返回第一个元素的位置 |
容量操作
接口 | 接口说明 |
---|---|
max_size | 最大容量,类似于capacity |
empty | 判空操作 |
size | 有效元素的个数 |
注意:容量操作都是返回key值的个数
元素修改操作
接口 | 接口说明 |
---|---|
insert(kay,value) | 插入操作 |
insert(it,key,value) | 在it的位置插入键值对 |
insert [begin,end) | 区间构造 |
erase(const key& x) | 删除操作,删除key等于x的元素 |
swap | 交换两个map中的元素 |
clear | 清空map中元素 |
find(const key& x) | 查找key为x的元素,找到返回位置迭代器,未找到返回end迭代器 |
count(const key& x) | 返回key为x元素的个数,0或1,主要是用于检测map中是否有key |
operator[ ] | 随机访问方式的重载,如果元素存在,则返回下标,不存在,则插入元素 |
at | 元素访问操作,如果元素不存在,返回异常 |
int main()
{std::map<char, int> mymap; //构造// 使用insert插入元素,pair<T1,T2>(key,value)创建键值对mymap.insert(std::pair<char, int>('a', 100));mymap.insert(std::pair<char, int>('z', 200));std::pair<std::map<char, int>::iterator, bool> ret;ret = mymap.insert(std::pair<char, int>('z', 500));if (ret.second == false) {std::cout << "element 'z' already existed";std::cout << " with a value of " << ret.first->second << '\n';}// 在it的位置插入键值对std::map<char, int>::iterator it = mymap.begin();mymap.insert(it, std::pair<char, int>('b', 300)); // max efficiency insertingmymap.insert(it, std::pair<char, int>('c', 400)); // no max efficiency inserting// 区间构造,同时使用find查找std::map<char, int> anothermap;anothermap.insert(mymap.begin(), mymap.find('c'));// 使用迭代器打印std::cout << "mymap contains:\n";for (it = mymap.begin(); it != mymap.end(); ++it)std::cout << it->first << " => " << it->second << '\n';std::cout << "anothermap contains:\n";for (it = anothermap.begin(); it != anothermap.end(); ++it)std::cout << it->first << " => " << it->second << '\n';//将mymap与anothermap进行交换mymap.swap(anothermap);//反向迭代器的使用std::cout << "mymap contains:\n";std::map<char, int>::reverse_iterator rit;for (rit = mymap.rbegin(); rit != mymap.rend(); ++rit)std::cout << it->first << " => " << it->second << '\n';std::cout << mymap.count('a') << std::endl;std::cout << mymap.size() << std::endl;std::cout << mymap.max_size() ;//删除key == a的元素mymap.erase('a');system("pause");return 0;
}
multimap
multip和map的唯一区别就是:map中的key唯一(不能重复)。multimap中的key是可以重复的
特征:
- mutilmap的key是可以重复的。
- multimap元素是按照小于进行排列。
基本的接口与map相类似,头文件和map头文件相同。
C++---map/multimap用法介绍相关推荐
- C++ STL容器 —— map/multimap 用法详解
C++ STL容器 -- map/multimap 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理.但别 ...
- map/multimap用法详解
multimap 类 标准模板库多重映射类用于存储和检索集合中的数据,此集合中的每个元素均为包含数据值和排序键的元素对. 键值不需要唯一,用于自动排序数据. 可以直接更改多重映射中的元素值,但不能直接 ...
- [C++STL]map容器用法介绍
代码如下: #include <iostream> #include <string> #include <map> using namespace std;voi ...
- std的list, vector, map,multimap, set 区别与用法比较
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector对于随机 ...
- STL详解(十)—— set、map、multiset、multimap的介绍及使用
文章目录 关联式容器 树形结构与哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的插入 map的查找 map的删 ...
- 【 C++ 】map、multimap的介绍和使用
目录 1.map map的介绍 map的定义 insert插入函数 map的迭代器 [ ]运算符重载 find查找函数 erase删除函数 其它函数 总结 2.multimap multimap的介绍 ...
- map函数作用c语言,c语言中map的用法:map基本用法
c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...
- set/multiset/unordered_set和map/multimap/unordered_map基础汇总
引言 在STL中,有两种很常见的关联容器,分别是set和map,序列容器的元素是按照在容器中的位置来顺序保存和访问的,而关联容器的元素是按关键元素来保存和访问的.所以关联容器经常用在关键字的查找中,效 ...
- 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】
[C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...
最新文章
- ubuntu 使用ccache加快linux内核编译速度
- HttpClient 实现爬取百度搜索结果(自动翻页)
- Pandas系列(十四)数据转换函数map、apply、applymap以及分组apply
- 关于Java字符串的几个重点
- eclipse、EditPlus等编辑器选中列(块)的方法
- 2019测试学习路线图,内附完整自学路线+视频+工具
- cad插入块_CAD施工制图常见问答(一)
- 统计学中sp_统计学中的F值、P值和r分别表示什么意思,怎么求
- python distribute包管理工具安装AttributeError错误
- 你还记得当年上课天天玩 JAVA游戏吗
- 基于android的五子棋开发
- elasticsearch学习 part4
- 如何给电脑硬盘分区?
- 风控模型中的KS-指标
- php 文件预览 水印,PHP图片上传,预览图上传,水印设置
- 关于植物大战僵尸如何更改关卡与金币
- 后端:静态资源放在cdn cdn涵义 cdn加载
- 美丽天天秒系统开发模式与美丽天天秒系统源码分享
- [Python][爬虫04]Fiddler与HTTP请求:抓取豆瓣评分以及资源链接(一)
- NeuroImage:经颅直流电刺激(tDCS)如何影响脑功能连接?