STL关联式容器之map和multimap
一,map和multimap的概念
1.map和multimap的基本知识
- map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。
- map中key值是唯一的,集合中的元素按照一定的顺序排列,元素插入过程是按照排序规则插入的,不能指定插入位置。
- map的底层数据结构是红黑树变体的平衡二叉树。在插入和删除操作中比vector要快。
- map可以直接存取key所对应得value,支持[]操作符,如map[key] = value;
- multimap和map的区别:map支持唯一的键值对,每个键只能出现一次,而multimap中相同的键可以出现多次,multimap不支持[]操作符。
- 要使用map必须要引入头文件# include<map>
二,map和multimap的基本操作
1.map和multimap的构造函数
// map的无参构造函数
map<string,string> m1;
// multimap的无参构造函数
multimap<string, string> m2;
2.map的插入操作
# include<iostream>
# include<map>
# include<string>
using namespace std; int main()
{
// 定义map集合
map<string, string> m;
// 插入方式1,返回结果是是否插入成功
pair<map<string,string>::iterator,bool> p1 = m.insert(pair<string, string>("Epic", "UnrealEngine"));
// 插入方式2,返回结果是是否插入成功
pair<map<string, string>::iterator, bool> p2 = m.insert(make_pair("Unity", "Unity3D"));
// 插入方式3,返回结果是是否插入成功
pair<map<string, string>::iterator, bool> p3 = m.insert(map<string, string>::value_type("Oracle", "Java"));
// 插入方式4
m["nokia"] = "Qt";
// 插入方式4可以修改值
m["nokia"] = "NewQt";
// 遍历
for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " = " << it->second << endl;
} return ;
}
3.map的遍历操作
# include<iostream>
# include<map>
# include<string> using namespace std; int main()
{
// 创建映射
map<string, string> m; // 插入元素
m.insert(make_pair("王刚","张文婧"));
m.insert(make_pair("吕布", "貂蝉"));
m.insert(make_pair("刘备", "孙尚香")); // 正向遍历
for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " = " << it->second << endl;
} // 反向遍历
for (map<string, string>::reverse_iterator it = m.rbegin(); it != m.rend(); it++)
{
cout << it->first << " = " << it->second << endl;
} return ;
}
4.map的删除操作
# include<iostream>
# include<map>
# include<string> using namespace std; int main()
{
// 创建映射
map<string, string> m;
// 插入元素
m.insert(make_pair("刘备1", "孙尚香1"));
m.insert(make_pair("刘备2", "孙尚香2"));
m.insert(make_pair("刘备3", "孙尚香3"));
m.insert(make_pair("刘备4", "孙尚香4"));
m.insert(make_pair("刘备5", "孙尚香5"));
// 删除刘备4
for (map<string, string>::iterator it = m.begin(); it != m.end(); )
{
if (it->first == "刘备4")
{
it = m.erase(it);
}
else {
it++;
}
}
// 遍历
for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " = " << it->second << endl;
}
// 获取map的长度
int size = m.size();
cout << "size = " << size << endl;
// 清空map
m.clear();
size = m.size();
cout << "size = " << size << endl; return ;
}
5.map的其他操作
# include<iostream>
# include<map>
# include<string> using namespace std; int main()
{
map<string, string> m;
/* 插入操作 */
m.insert(make_pair("aaa", "AAA"));
m.insert(make_pair("bbb", "BBB"));
m.insert(make_pair("ccc", "CCC"));
/* 统计,map的的可能结果为0或者1,multimap的结果是可能多变的 */
int s = m.count("aaa");
cout << "s = " << s << endl;
/* 查找,根据key来查找,返回该key的迭代器 */
map<string,string>::iterator it = m.find("aaa");
cout << it->first << " = " << it->second << endl; return ;
}
STL关联式容器之map和multimap的更多相关文章
- STL关联式容器之set\map ----以STL源码为例
关联式容器的特征:所用元素都会根据元素的键值自动被排序. set STL 中的关联式容器低层数据结构为红黑树,其功能都是调用低层数据结构中提供的相应接口. set元的元素不会像map那样同时拥有键(k ...
- STL关联式容器之set和multiset
一,set和multiset的基础知识 1.set和multiset的基础 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按照一定的顺序排列,元素插入过程是按照排序规则插入的.所以不能指 ...
- STL序列式容器之list
一,list容器基本概念 1.list容器基本知识 list容器的底部数据结构为双向链表,可以高效的进行插入和删除元素. list因为底层数据结构是双向链表,因此不支持下标操作和.at()函数的操作. ...
- [知识点]C++中STL容器之map
UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...
- STL——关联式容器
一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tre ...
- iBinary C++STL模板库关联容器之map/multimap
目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...
- C++ 序列式容器之vector
什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree ...
- STL学习系列九:Map和multimap容器
1.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...
- C++ STL 学习笔记__(8)map和multimap容器
10.2.9 Map和multimap容器 map/multimap的简介 ² map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ² ...
随机推荐
- v-if和updated钩子结合使用 渲染echart图表
项目需求是这样的,用户可以自定选择echart 曲线图 是横向还是竖向显示.我的做法是 写了一个横向的echart图表,也写了一个竖向的echart图表,然后两者共用存在store里的图表数据,就能实 ...
- 关于stm32加不进.h文件的问题
把路径也设置好了,但是.h文件加入不进去, 编译的时候.h文件也出来了 那是因为.h或对应的.c文件中存在错误,改掉错误就能成功,有时候keil不会报错,可能是因为定义变量没有定义好 如果显示某个变量 ...
- UVA 11388 - GCD LCM 水~
看题传送门 题目大意: 输入两个数G,L找出两个正整数a 和b,使得二者的最大公约数为G,最小公倍数为L,如果有多解,输出a<=b且a最小的解,无解则输出-1 思路: 方法一: 显然有G< ...
- (转)SQL Server 2012笔记分享-25:配置备份维护计划
本文转自http://543925535.blog.51cto.com/639838/1427529 在日常的SQL维护中,有很多需要重复周期性去做的工作我们不太可能去手动操作完成,比如备份作业.重建 ...
- swift开发网络篇 - 网络基础
GET & POST GET GET的语义是获取指定URL的资源 将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用"?"连接 ...
- php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解)
php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解) 一.总结 $cur=$cur->next;这句话需要好好理解 指$cu ...
- 一个神奇的控件——Android CoordinatorLayout与Behavior使用指南
CoordinatorLayout是support.design包中的控件,它可以说是Design库中最重要的控件. 本文通过模仿知乎介绍了自定义Behavior,通过模仿百度地图介绍了BottomS ...
- php实现求对称二叉树(先写思路,谋而后动)
php实现求对称二叉树(先写思路,谋而后动) 一.总结 1.先写思路,谋而后动 二.php实现求对称二叉树 题目描述: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的 ...
- J2EE&JavaEE概述
来源 Sun公司在1998年发表JDK1.2版本的时候, 使用了新名称Java 2 Platform,即"Java2平台",修改后的JDK称为Java 2 Platform Sof ...
- springMVC注解@initbinder
在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能. 比 ...