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
------------------------------

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐