基本用法

map 是 C++ 标准模板库(STL)中的关联容器,用于存储键值对(key-value pairs),其中每个键是唯一的。键值对按照键的顺序自动排序。

声明与初始化

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

int main() {
std::map<int, std::string> myMap;

// 插入键值对
myMap.insert(std::make_pair(1, "one"));
myMap[2] = "two";

// 访问元素
std::cout << myMap[1] << std::endl; // 输出 "one"
std::cout << myMap.at(2) << std::endl; // 输出 "two"

return 0;
}

特点和注意事项

  1. 有序性map 中的元素按照键自动排序,默认情况下使用 < 运算符进行比较。可以自定义比较器来改变排序规则。
  2. 唯一性map 中的每个键都是唯一的。如果插入一个已存在的键,则会覆盖原有的值。
  3. 复杂度map 的查找、插入和删除操作的平均时间复杂度为 O(log n),这是因为它通常是用红黑树(Red-Black Tree)实现的。
  4. 内存占用:相比于 unordered_mapmap 由于维护了元素的有序性,通常占用更多的内存和有略低的性能。

示例代码

以下是一个更详细的 map 使用示例,包括遍历、查找和删除操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <map>

int main() {
std::map<std::string, int> ageMap;

// 插入键值对
ageMap["Alice"] = 30;
ageMap["Bob"] = 25;
ageMap["Charlie"] = 35;

// 遍历 map
for (const auto& pair : ageMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}

// 查找元素
auto it = ageMap.find("Bob");
if (it != ageMap.end()) {
std::cout << "Found Bob, age: " << it->second << std::endl;
} else {
std::cout << "Bob not found" << std::endl;
}

// 删除元素
ageMap.erase("Alice");

// 检查元素是否存在
if (ageMap.count("Alice") == 0) {
std::cout << "Alice has been removed" << std::endl;
}

return 0;
}

总结

map 是一个强大且灵活的关联容器,适用于需要自动排序键值对的场景。其有序性和高效的查找、插入、删除操作使其在许多应用中非常有用。但在使用时需要注意其相对较高的内存占用和略低的性能。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。