STL map初始化、插入与删除的几种方法 / multimap 介绍
mapmap 是一种关联式容器,包含关键字 / 值 对,一对一 有着映射关系
·
map
map 是一种关联式容器,包含关键字 / 值 对,一对一 有着映射关系
此文章介绍 初始化、插入与删除的几种不同方法
首先,我们包含头文件和所需的命名空间:
#include <iostream>
#include <map>
using namespace std;
一些方法与演示在如下框架中:
int main()
{
.
.
.
.
return 0;
}
初始化
// 初始化构造
map<int, string> map_test1; // 默认构造
map<int, string> map_test2(map_test1.begin(), map_test1.end()); // 范围构造
map<int, string> map_test3 = map_test2; // 赋值构造
map<int, string> map_test4(map_test2); // 复制构造
// 内部是一个pair对象
map<int, string> map_test5{ pair<int, string>(1, "aaa"),pair<int, string>(2, "bbb") };
// 使用make_pair 构造 pair
map<int, string> map_test6{ make_pair(1, "abc"), make_pair(2, "xyz") };
插入元素
// 用数组的方法,但他不是数组
map_test1[100] = "obj_0";
map_test1[1] = "obj_1";
map_test1[2] = "obj_2";
map_test1[100] = "obj_100"; // 这种方式, 会覆盖掉原来的元素
for (auto& i: map_test1)
{
cout << i.first << " " << i.second << endl;
}
cout << "------------------------------" endl;
// 插入一个pair
map_test1.insert(pair<int, string>(3, "obj_3));
map_test1.insert(pair<int, string>(4, "obj_4));
for(auto& i: map_test1)
{
cou << i.first << " " << i.second << endl;
}
cout << "------------------------------" endl;
// 插入一个 value_type 做一个pair对象
map_test1.insert(map<int, string>::value_type(5, "obj_5"));
map_test1.insert(map<int, string>::value_type(6, "obj_6"));
map_test1.insert(map<int, string>::value_type(100, "obj_6")); // 不会更改 相同直接跳过
// C++11 新标准 列举初始化构造一个pair对象
map_test1.insert({ 200, "huameng" });
for(auto& i: map_test1)
{
cout << i.first << " " << i.second << endl;
}
cout << "------------------------------" endl;
结果为:
1 obj_1
2 obj_2
100 obj_100
------------------------------
1 obj_1
2 obj_2
3 obj_3
4 obj_4
100 obj_100
------------------------------
------------------------------
1 obj_1
2 obj_2
3 obj_3
4 obj_4
5 obj_5
6 obj_6
100 obj_100
200 huameng
------------------------------
删除元素
// 利用迭代器删除
auto iter = map_test1.find(100);
map_test1.erase(iter);
// 利用键值删除
map_test1.erase(0);
// 范围删除
map_test1.erase(map_test1.begin(), map_test1.end());
multimap
multimap 和 map 很相似,但是 multimap 允许重复的元素。
下面来演示一下这种性质:
multimap<int, string> multi_map; // 可实现多重映射
multimap.insert({ 520, "huameng" });
multimap.insert({ 520, "huameng1" });
multimap.insert({ 520, "huameng2" });
cout << "------------------------------" endl;
for (auto& i: multi_map)
{
cout << i.first << " " << i.second << endl;
}
cout << "------------------------------" endl;
结果为:
------------------------------
520 huameng
520 huameng1
520 huameng2
------------------------------
更多推荐
已为社区贡献1条内容
所有评论(0)