C++标准模板库(STL)之map

最近,我参与了师兄的论文实现,原型系统需要用到键值对映射。考虑到项目代码采用C++编写,因此,有必要了解下STL中map的使用方法。

定义map

1
2
3
4
5
6
7
8
// 1.添加头文件
#include <map>

// 2.使用标准命名空间
using namespace std;

// 3.定义map
map<string, string> filemap;

添加元素

直接添加

1
map[key] = value;

使用insert函数

  • 直接插入
1
2
// value_type为std::pair<key_type, mapped_type>
std::pair<iterator, bool> insert(const value_type& value);

例如:

1
2
3
4
5
6
7
8
9
10
#include <map>
#include <string>

using namespace std;

int main()
{
map<string, string> mp;
mp.insert(pair<string, string>("name", "33"));
}

这种写法比较啰嗦,为了简化代码,可以使用make_pair函数,其函数签名如下:

1
std::pair<T1, T2> make_pair(T1 t, T2 u);

使用make_pair函数,上述代码简化为:

1
mp.insert(make_pair("name", "33"));
  • 在指定位置插入
1
iterator insert(iterator position, const value_type& value);

查找元素

函数签名:

1
map<key_type, mapped_type>::iterator find(const key_type& x);

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdio>
#include <map>
#include <string>

using namespace std;

int main()
{
map<string, string> dict;
dict["name"] = "33";
dict["sex"] = "male";
dict["age"] = "26";

map<string, string>::iterator it = dict.find("sex");
printf("%s %s\n", it->first.c_str(), it->second.c_str());
return 0;
}

输出结果如下:

1
sex male

遍历元素

1
2
3
4
for (map<key_type, mapped_type>::iterator it = map.begin(); 
it != map.end(); it++) {
cout << it->first << ":" << it->second << endl;
}

删除元素

  • 删除单个元素

函数原型:

1
2
3
// 返回删除元素的个数
size_type erase(const key_type& x);
void erase(iterator position);

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <map>
#include <string>

using namespace std;

int main()
{
map<string, string> dict;
dict["name"] = "33";
dict["sex"] = "male";
dict["age"] = "26";

map<string, string>::iterator it = dict.find("name");
dict.erase(it);
dict.erase("sex");

for (map<string, string>::iterator it = dict.begin(); it != dict.end(); it++) {
printf("%s = %s\n", it->first.c_str(), it->second.c_str());
}
return 0;
}

输出内容如下:

1
age = 26
  • 删除一个区间内的所有元素
1
void erase(iterator first, iterator last);

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
#include <map>
#include <string>

using namespace std;

int main()
{
map<string, string> dict;
dict["name"] = "33";
dict["sex"] = "male";
dict["age"] = "26";

map<string, string>::iterator it = dict.find("name");
dict.erase(it, dict.end());

for (map<string, string>::iterator it = dict.begin(); it != dict.end(); it++) {
printf("%s = %s\n", it->first.c_str(), it->second.c_str());
}
return 0;
}

输出内容如下:

1
age = 26

参考资料


----------本文结束感谢您的阅读----------
坚持原创技术分享,您的支持将鼓励我继续创作!