STL容器-map

已结束 ACM/ICPC 开始于: 2025-3-21 10:00 1564 小时 主持人: 40

一、什么是 map

map:是关联容器的一种,map 的每个元素都分为关键字和值两部分,容器中的元素是按关键字排序的,并且不允许有多个元素的关键字相同(multimap 允许存储相同键的元素)。

二、map 使用注意:

(1) 第一个可以称为关键字 (key),每个关键字只能在 map 中出现一次,第二个可能称为该关键字的值 (value);

例如:map<string, int> a; 可以将字符串映射为整数,

map<double, int>a; 可以将双精度浮点数映射为整数。

(2) map 中的元素是一对数据:< 关键字,数值 >,这个概念在 STL 中有专门的数据结构叫 pair,有一个相关函数 make_pair 和两个成员名:first、second。

 

(3) pair:pair 是将 2 个数据组合成一组数据,当需要这样的需求时就可以使用 pair,pair 的实现是一个结构体,主要的两个成员变量是 first 和 second。

(4) 注意:不能直接修改 map 容器中的关键字。因为 map 中的元素是按照关键字排序的,当关键字被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。

三、map常见函数

函数名

函数说明

find(关键字)

返回指定关键字元素的位置迭代器,如果不存在返回map.end()

count(关键字)

统计指定关键字元素的个数,由于map每个关键字都不相同,count结果只能是1或者0

insert(元素)

插入元素到map中,元素一般是make_pair(关键字,值)

erase(关键字/迭代器)

删除map指定位置或者指定关键字的元素

clear()

清除map所有元素,size()变为0

运算符[ ]

取/赋值map的指定关键字的对应值,类似数组的下标运算

begin()

map的第一个元素(最小)的位置,返回第一个元素迭代器(指针)

end()

map的结束位置,注意:返回的迭代器是最后一个元素的后面位置,不是最后一个元素的迭代器

size()

元素个数,map的大小,也就是map中已有的元素的个数

empty()

判断map是否为空,等价于size()是否为0

四、map的使用

#include<bits/stdc++.h>
using namespace std;

int main() { //1、定义一个 map,默认根据 key 升序排序 map<int, string> m; //map<int, string, greater<int> > m; //为 map 元素赋值 m[1000] = "Zhang"; m[1002] = "Zhao"; m[1003] = "Sun"; m[1001] = "Wang"; m[1000] = "Li";

//2、获取键(关键字 key)为 1000 的值
cout&lt;&lt;m[1000]&lt;&lt;endl;


//3、利用 make_pair 创建 pair 插入到 map 中
//如果插入 pair,出现同样的 key 不会有后面的 value 覆盖前面 value 的效果
pair&lt;int&#44; string&gt; p(1004&#44; "Zhou");
pair&lt;int&#44; string&gt; p2(1004&#44; "Wu");
m.insert(p);
m.insert(p2);
//cout&lt;&lt;m[1004]&lt;&lt;endl; 
//4、erase
//删除 key 为 1003 的 pair

//m.erase(1003);
//由于 map 支持双向迭代器,因此不能用迭代器+x 或者迭代器-x
//m.erase(m.begin());


//遍历 map
map&lt;int&#44; string&gt;::iterator it;


//5、find:获取指定元素的位置迭代器
it = m.find(1003);
//it != m.end()
if(m.count(1003)){
	cout&lt;&lt;"1003 找到了,值为:"&lt;&lt;it-&gt;second&lt;&lt;endl;
}else{
	cout&lt;&lt;"1003 找不到!"&lt;&lt;endl;
	}


//遍历 map
for(it = m.begin();it != m.end();it++){
	//cout&lt;&lt;it-&gt;first&lt;&lt;" "&lt;&lt;it-&gt;second&lt;&lt;endl;
	cout&lt;&lt;(*it).first&lt;&lt;" "&lt;&lt;(*it).second&lt;&lt;endl;
}


return 0;

}


</span>

状态
已结束
规则
ACM/ICPC
题目
6
开始于
2025-3-21 10:00
结束于
2025-5-25 14:00
持续时间
1564 小时
主持人
参赛人数
40