1.unordered_map 定义

unordered_map是 C++ 标准库中的一个容器,它是基于哈希表实现的键值对存储结构。与 unordered_set 类似,unordered_map 提供了快速的查找、插入和删除操作,但它存储的是键值对(key-value)。由于基于哈希表实现,unordered_map 的键是无序的,查找和插入的时间复杂度在平均情况下为 O(1)。

2.unordered_map 的特点:

  1. 键值对(key-value)结构:每个元素由一个键和一个对应的值组成,键是唯一的,而值可以是相同的。
  2. 无序存储:键值对的存储顺序没有特定规律,是无序的。
  3. 基于哈希表:通过哈希函数实现键的映射和查找操作,查找、插入和删除的平均时间复杂度为 O(1)。
  4. 不允许重复的键:每个键是唯一的,如果插入一个已存在的键,新的值会覆盖旧的值。

3.常用成员函数和操作:

构造函数:

  • unordered_map<string, int> my_map;:创建一个空的 unordered_map,键为 string 类型,值为 int 类型。
  • unordered_map<int, string> my_map{{1, "one"}, {2, "two"}};:使用初始化列表初始化一个 unordered_map。
  • unordered_map<int, string> my_map(another_map.begin(), another_map.end());:使用另一个容器的迭代器范围构造一个 unordered_map。

插入元素:

  • my_map[key] = value;:插入或更新键为 key,值为 value 的键值对。如果 key 已存在,则更新其值。
  • my_map.insert({key, value});:插入键值对 {key, value}。如果 key 已存在,则不会插入。

访问元素:

  • my_map[key]:返回键为 key 的值。如果 key 不存在,会插入一个默认值。
  • my_map.at(key):返回键为 key 的值,但如果 key 不存在,则会抛出异常。

查找元素:

  • my_map.find(key);:查找键为 key 的元素,返回一个指向该元素的迭代器。如果不存在,返回 my_map.end()。
  • my_map.count(key);:返回键为 key 的数量,若存在返回 1,若不存在返回 0。

    删除元素:

  • my_map.erase(key);:删除键为 key 的元素,如果存在则删除,返回 1,否则返回 0。
  • my_map.erase(it);:删除迭代器 it 所指向的元素。

大小和容量:

  • my_map.size();:返回 unordered_map 中键值对的数量。
  • my_map.empty();:判断 unordered_map 是否为空。

遍历元素:

for (const auto& pair : my_map) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}