STL容器-map
一、什么是 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的使用
</span>#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<<m[1000]<<endl; //3、利用 make_pair 创建 pair 插入到 map 中 //如果插入 pair,出现同样的 key 不会有后面的 value 覆盖前面 value 的效果 pair<int, string> p(1004, "Zhou"); pair<int, string> p2(1004, "Wu"); m.insert(p); m.insert(p2); //cout<<m[1004]<<endl; //4、erase //删除 key 为 1003 的 pair //m.erase(1003); //由于 map 支持双向迭代器,因此不能用迭代器+x 或者迭代器-x //m.erase(m.begin()); //遍历 map map<int, string>::iterator it; //5、find:获取指定元素的位置迭代器 it = m.find(1003); //it != m.end() if(m.count(1003)){ cout<<"1003 找到了,值为:"<<it->second<<endl; }else{ cout<<"1003 找不到!"<<endl; } //遍历 map for(it = m.begin();it != m.end();it++){ //cout<<it->first<<" "<<it->second<<endl; cout<<(*it).first<<" "<<(*it).second<<endl; } return 0;
}
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 6
- 开始于
- 2025-3-21 10:00
- 结束于
- 2025-5-25 14:00
- 持续时间
- 1564 小时
- 主持人
- 参赛人数
- 40