目录
介绍
常用函数
函数实例
插入元素,并判断是否插入成功
遍历map
查找元素
删除元素
介绍
map是STL的一个关联容器,它提供一对一的hash。
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,如下图:
常用函数
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
insert()插入元素
max_size()返回可以容纳的最大元素个数
size() 返回map中元素的个数
swap() 交换两个map
get_allocator() 返回map的配置器
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
函数实例
插入元素,并判断是否插入成功
#include <map>
#include <iostream>
using namespace std;
int main()
{
map<int, string> myMap;
// 第一种 用insert函數插入pair
myMap.insert(pair<int,string>(01, "aa"));
// 第二种 用insert函数插入value_type数据
myMap.insert(map<int, string>::value_type(02, "bb"));
// 第三种 用"array"方式插入
myMap[33] = "cc";
// 构造定义,返回一个pair对象,验证是否添加成功
pair<map<int, string>::iterator, bool> Insert_Pair;
Insert_Pair = myMap.insert(map<int, string>::value_type(33, "cc"));
if (!Insert_Pair.second)
cout << "Error insert new element" << endl;
cout << "\n";
return 0;
}
遍历map
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
for (int i = 0; i < 5; i++) {
m[i] = i * i;
}
//第一种遍历方式,迭代器+while
map<int, int>::iterator iter;
iter = m.begin();
while (iter != m.end()) {
cout << iter->first << "-" << iter->second << endl;
iter++;
}
//第二种遍历方式,for+迭代器
for (iter = m.begin(); iter != m.end(); iter++) {
cout << iter->first << "-" << iter->second << endl;
}
//第三种遍历方式,for+auto
for (auto &it : m) {
cout << it.first << "-" << it.second << endl;
}
return 0;
}
查找元素
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
for (int i = 0; i < 5; i++) {
m[i] = i * i;
}
auto it = m.find(3);
if (it != m.end())
{
int ss = (*it).second;//或者int ss=it->second
cout << ss << endl;
}
return 0;
}
删除元素
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
for (int i = 0; i < 5; i++) {
m[i] = i * i;
}
//删除键为bfff指向的元素
m.erase(4);
//删除迭代器 key所指向的元素
map<int, int>::iterator key = m.find(2);
if (key != m.end())
{
m.erase(key);
}
//删除所有元素
m.erase(m.begin(), m.end());
return 0;
}
统计key的出现的次数
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, int> m;
for (int i = 0; i < 5; i++) {
m[i] = i * i;
}
int c = m.count(1);
cout << c << endl;
return 0;
}