- 头文件
#include <map>
using namespace std;
- 定义
map<string, int> mp; //不能用char[] 健->值
map<set<int>, int> mp;
map<set<int>, string> //map的健和值可以是是STL容器
- 访问
(1)下标访问
map中的健是唯一的
map<char, int> mp;
mp['c'] = 20;
mp['c'] = 30;
printf("%d", mp['c']);
输出结果是30
2. 迭代器 :
map<typename1, typename2>::iterator it; //vi.begin() and vi.end() is one of iterator
it->firsst //访问健
it->second //访问值
for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
printf("%c %d\n", it->first, it->second);
}
而且健的值会从小到大排序
- Common functions:
(1) find(key) //返回键为key的映射迭代器 O(logN)
#include
<cstdio>
#include
<map>
using
namespace
std;
int
main() {
map<
char
,
int
> mp;
mp[
'a'
] = 1;
mp[
'b'
] = 2;
mp[
'c'
] = 3;
map<
char
,
int
>::iterator it = mp.find(
'b'
);
printf(
"%c %d\n"
, it->first, it->second);
return
0;
}
//输出结果
b 2
(2) erase(it) //删除元素的迭代器
erase(key) //删除映射的健
mp.erase(first, last) //删除一个区间的所有元素, 即左闭右开的区间[first, last)
#include
<cstdio>
#include
<map>
using
namespace
std;
int
main() {
map<
char
,
int
> mp;
mp[
'a'
] = 1;
mp[
'b'
] = 2;
mp[
'c'
] = 3;
map<
char
,
int
>::iterator it = mp.find(
'b'
);
mp.erase(it, mp.end()); //删除it之后的所有映射, 即b 2 和 c 3
for
(map<
char
,
int
>::iterator it = mp.begin(); it != mp.end(); ++it)
printf(
"%c %d\n"
, it->first, it->second);
return
0;
}
(3)size() //map映射的对数
(4)clear() //清空map中所有元素
- 主要用途:
(1)需要建立字符(或字符串)与整数之间的映射的题目, 使用map可以减少代码量
(2)判断大整数或者其他类型数据是否存在的题目, 可以把map当bool数组使用
(3)字符串和字符串的映射也有可能会遇到