c++ 字典操作
map<> 是 C++ STL(标准模板库)中的容器之一,可以看作是一种关联式数组,也称为字典(dictionary)或映射(map)。
在 map<> 中,每个元素都由一个键和一个值组成。其中,键是唯一的,而值则可以重复。它使用红黑树(一种自平衡二叉搜索树)作为内部实现,使得查找、插入、删除等操作的时间复杂度为 O(log n)。
map<> 的声明方式如下:
template < typename Key, typename T, typename Compare = std::less<Key>,
typename Allocator = std::allocator<std::pair<const Key, T>> >
class map;
/*其中,Key 表示键的数据类型,T 表示值的数据类型,
Compare 表示比较函数的类型,默认使用 std::less<Key>(即按照键的默认顺序进行比较),
Allocator 表示用于动态分配内存的分配器类型,默认为 std::allocator<std::pair<const Key, T>>。*/
以下是 map<> 的一些常用操作:
- 插入元素:map.insert(std::make_pair(key, value)) 或 map[key] = value
- 访问元素:map[key]
- 删除元素:map.erase(key)
- 查找元素:map.find(key),返回一个迭代器
- 遍历元素:使用迭代器 std::map<Key, T>::iterator 或者 auto
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> myMap;
myMap.insert(std::make_pair("Alice", 23));
myMap.insert(std::make_pair("Bob", 18));
myMap.insert(std::make_pair("Charlie", 31));
auto it = myMap.find("Alice");
if (it != myMap.end()) {
std::cout << "Alice's age is " << it->second << std::endl;
}
for (const auto& p : myMap) {
std::cout << p.first << ": " << p.second << std::endl;
}
return 0;
}
/*<<<<<<<<<<<<<<<<
Alice: 25
Bob: 30
Charlie: 35
Bob's age is 30*/
#include <iostream>
#include <unordered_map>
int main() {
// 创建一个字典
std::unordered_map<std::string, int> myDict;
// 插入键值对
myDict.insert({"Alice", 25});
myDict.insert({"Bob", 30});
// 使用索引操作符添加或更新元素
myDict["Charlie"] = 35;
myDict["Bob"] = 40; // 根据键更新值
// 使用迭代器遍历字典
for (auto it = myDict.begin(); it != myDict.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
// 判断字典是否包含某个键
if (myDict.count("Alice")) {
std::cout << "Alice's age is " << myDict["Alice"] << std::endl;
}
// 删除某个键值对
myDict.erase("Charlie");
// 清空整个字典
myDict.clear();
return 0;
}