C++ map
文章目录
前言
map是常用的STL容器,它可以将任何基本类型映射到任何基本类型
它会以键的大小自动排序。
一、map的定义
如果要使用 map 需要添加头文件,并且声明命名空间 std
#include <map>
using namespace std;
定义
#include <map>
using namespace std;
map<typename_Key, typename_Value> Mymap; //typename_Key为主键,typename_Value为主键映射的值
一般情况下,可以像访问数组一样访问 map
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> Mymap;
Mymap["one"] = 1;
Mymap["two"] = 2;
Mymap["three"] = 3;
cout << Mymap["one"] << endl << Mymap["two"] << endl << Mymap["three"] << endl;
return 0;
}
结果如下:
map 也可以通过迭代器访问
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<char, int> Mymap;
Mymap['a'] = 10;
Mymap['b'] = 20;
Mymap['c'] = 30;
map<char, int>::iterator it_map_start = Mymap.begin(); //迭代器存放首地址
map<char, int>::iterator it_map_end = Mymap.end(); //迭代器存放尾元素地址的下一位(不存元素,只作为迭代器末尾标志)
for(it_map_start; it_map_start != it_map_end; it_map_start ++)
cout << it_map_start->first << ' ' << it_map_start->second << endl; //map迭代器可以用 first 访问键,用 second 访问值。
return 0;
}
结果如图:
二、map常用函数
1.find(): 返回键的映射的迭代器
时间复杂度O(logN),N为map中映射个数
代码如下(示例):
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<char, int> Mymap_char;
map<string, int>Mymap_str;
Mymap_char['x'] = 24;
Mymap_str["okk"] = 36;
map<char, int>::iterator it_map_char = Mymap_char.find('x');
map<string, int>::iterator it_map_str = Mymap_str.find("okk");
cout << it_map_char->first << ' ' << it_map_char->second << endl;
cout << it_map_str->first << ' ' << it_map_str->second << endl;
return 0;
}
结果如下:
2.erase():删除元素
erase(it_map):删除迭代器为 it_map 的元素
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, int> Mymap_int;
Mymap_int[1] = 10;
Mymap_int[2] = 20;
Mymap_int[3] = 30;
map<int, int>::iterator it_map_int = Mymap_int.find(2);
Mymap_int.erase(it_map_int);
for(map<int, int>::iterator it = Mymap_int.begin(); it != Mymap_int.end(); it ++)
cout << it->first << ' ' << it->second << endl;
return 0;
}
结果如下:
erase(a): 删除键为 a 的元素
时间复杂度O(logN),N为 map 内元素个数
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> Mymap_str;
Mymap_str["one"] = 100;
Mymap_str["two"] = 200;
Mymap_str["three"] = 300;
Mymap_str.erase("two");
for(map<string, int>::iterator it = Mymap_str.begin(); it != Mymap_str.end(); it ++)
cout << it->first << ' ' << it->second << endl;
return 0;
}
结果如图:
erase(it_map_start, it_map_end):删除迭代器 it_map_start 到 it_map_end 区间的元素
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<char, int> Mymap_char;
Mymap_char['q'] = 10;
Mymap_char['w'] = 15;
Mymap_char['e'] = 20;
Mymap_char['r'] = 25;
map<char, int>::iterator it_map_char_start = Mymap_char.begin();
map<char, int>::iterator it_map_char_end = Mymap_char.end();
Mymap_char.erase(it_map_char_start, it_map_char_end);
cout << Mymap_char.size() << endl; //size() 可以获取 map 中映射对数,时间复杂度为 O(1)
return 0;
}
结果如下:
3.clear():清空map
时间复杂度 O(N), N为元素个数
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<char, int> Mymap_char;
Mymap_char['a'] = 1;
Mymap_char['b'] = 3;
Mymap_char['c'] = 5;
Mymap_char.clear();
cout << Mymap_char.size() << endl; //查询 Mymap_char 中映射对数
return 0;
}
结果如下: