map
定义
template <class Key, class Value>
std::map<Key, Value> m;
增加
插入
m.insert(make_pair(key, value))
添加
m[key] = value
获取
取值
m[key]
查询
查找 key 是否存在, 若iterator 指向end() 即不存在
std::map<T, V>::iteraotr it;
it.find(key)
遍历
- 示例, 遍历map
// 方法1
for(auto it = m.begin(); it != m.end(); it++) {
// it->first, it->second;
}
// 方法2
for (auto &[k, v] : m) {
// k, v
}
#include <iostream>
#include <map>
int main(void) {
std::map<std::string, int32_t> m = { {"Wang", 20}, {"Li", 22}, {"Deng", 19} };
for (auto &[k, v] : m) {
std::cout << k << ", " << v << std::endl;
}
return 0;
}
删除
删除键值对
template <class T, class V>
std::map<T, V> m;
// 删除键为key的键值对
m.erase(key)
unordered_map
std::unordered_map是一种关联容器, 提供基于哈希表的数据结构, 可快速地进行键值对插入、删除、查找操作
与std::map相比, std::unordered_map中元素无序, 因为它使用哈希表来存储元素, 而非树结构
定义
// 定义一个键类型为std::string, 值类型为int的unordered_map
std::unordered_map<std::string, int> m;
插入
- 示例, 使用operator[]插入或更新元素
// 插入键值对 ("apple", 2)
m["apple"] = 2;
// 插入键值对 ("banana", 3)
m["banana"] = 3;
- 示例, 使用insert方法插入元素
// 插入键值对 ("orange", 4)
m.insert({"orange", 4});
获取
访问
- 示例, 使用operator[]访问元素(若键不存在, 会创建一个默认值)
// 访问键为 "apple" 的值, 输出 2
int count = m["apple"];
- 示例, 使用at方法访问元素(若键不存在, 会抛出异常)
try {
int count = m.at("banana");
std::cout << "banana count: " << count << std::endl;
} catch (const std::out_of_range& e) {
std::cout << "Key not found" << std::endl;
}
查找
- 示例, 使用find方法查找元素(返回迭代器)
auto it = m.find("orange");
if (it != m.end()) {
std::cout << "found orange with count: " << it->second << std::endl;
} else {
std::cout << "orange not found" << std::endl;
}
查询
- 示例, 使用count方法检查键是否存在(返回 0 表示不存在, 1 表示存在)
if (m.count("banana") > 0) {
std::cout << "banana is in the map" << std::endl;
} else {
std::cout << "banana is not in the map" << std::endl;
}
遍历
for (const auto& [k, v] : fruit_count) {
std::cout << "Key: " << k << ", Value: " << v << std::endl;
}
删除
- 示例, 使用erase方法删除指定键元素
// 删除键为 "apple" 的元素
m.erase("apple");
- 示例, 使用clear方法删除所有元素
m.clear();