当前位置:   article > 正文

C++关联容器unordered_map无法通过索引来访问元素

C++关联容器unordered_map无法通过索引来访问元素

// unordered_map 是 C++ 标准模板库(STL)中的一个关联容器,它提供了键-值对的存储,其特点如下:
// 1. 哈希表结构:unordered_map 使用哈希表来实现,这意味着它能够以 O(1) 的平均时间复杂度进行元素的插入、查找和删除操作。
// 2. 无序性:unordered_map 中的元素没有固定的顺序,插入元素的顺序和元素的键值大小没有关系,因此无法通过索引来访问元素
// 3. 唯一键:unordered_map 中的键是唯一的,每个键最多只能关联一个值。如果尝试插入一个已经存在的键,则该键对应的值会被更新。
// 4. 可变大小:unordered_map 可以动态地增加或减少存储空间,它会自动调整内部存储结构以适应存储元素的数量变化。
// 5. 迭代器支持:unordered_map 支持迭代器,可以通过迭代器对容器中的元素进行遍历和操作。
// 6. 查找效率高:由于哈希表的特性,unordered_map 在查找元素时具有较高的效率,尤其是在大数据量的情况下。
// 7. 内存占用相对较高:与有序关联容器(如 map)相比,unordered_map 在一定程度上会占用更多的内存空间,因为它需要额外的空间来存储哈希表的索引。
// unordered_map 提供了丰富的成员函数和操作符,使得对容器的操作更加方便和灵活。

--

unordered_map 是 C++ 标准模板库(STL)中的一种关联容器,它是一种以键值对的形式存储数据的集合。unordered_map 中的元素是通过哈希函数(hash function)来计算键的值,以确定元素的存储位置因此,它也被称为“哈希表”(hash table)或“无序映射”(unordered map)。

-

// 在C++中,`unordered_map`容器的迭代器是一种指向容器元素的对象,它允许我们遍历容器中的元素。当我们在使用范围循环来遍历`unordered_map`时,迭代器`pair`会逐个指向每个键值对。
// 让我们来详细看看这个概念:
// - 在范围循环中,`const auto& pair` 中的`pair`是一个迭代器,它会依次指向`unordered_map`中的每个键值对。
// - 迭代器可以理解为容器中的一个游标,它可以通过递增来遍历容器中的元素。
// - 在每次迭代中,`pair`会指向当前遍历到的键值对,包括键和对应的值。
// - 通过`pair.first`和`pair.second`,我们可以访问当前键值对中的键和值。

// 所以,在`unordered_map`的范围循环中,`pair.first`用于访问当前键值对的键,`pair.second`用于访问当前键值对的值。

 

  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>
  4. using namespace std;
  5. int main() {
  6. // 创建一个 unordered_map,键是学生姓名,值是年龄
  7. unordered_map<string, int> studentAge;
  8. // 向 unordered_map 中添加元素
  9. studentAge["Alice"] = 20;
  10. studentAge["Bob"] = 22;
  11. studentAge["Charlie"] = 21;
  12. // 访问元素并输出
  13. cout << "Alice's age: " << studentAge["Alice"] << endl;
  14. cout << "Bob's age: " << studentAge["Bob"] << endl;
  15. cout << "Charlie's age: " << studentAge["Charlie"] << endl;
  16. // 检查某个键是否存在
  17. string name = "David";
  18. if (studentAge.find(name) != studentAge.end()) {
  19. cout << name << "'s age: " << studentAge[name] << endl;
  20. } else {
  21. cout << name << " not found in the map." << endl;
  22. }
  23. // 删除某个键值对
  24. studentAge.erase("Charlie");
  25. // 遍历 unordered_map
  26. cout << "Student List:" << endl;
  27. for (const auto& pair : studentAge) {
  28. cout << "Name: " << pair.first << ", Age: " << pair.second << endl;
  29. }
  30. return 0;
  31. }

--------

unordered_map 是 C++ 标准库提供的一个非常有用的容器,它提供了许多成员函数和操作符,用于对哈希表中的键值对进行操作。
下面是一些 unordered_map 提供的主要成员函数和操作符:
1. 插入操作:
   - insert: 插入键值对到 unordered_map 中。
   - emplace: 在 unordered_map 中构造一个新的元素。
2. 访问元素:
   - operator[]: 通过键访问值,如果键不存在,则会插入一个新的键值对。
   - at: 通过键访问值,如果键不存在,则会抛出异常。

3. 删除元素:
   - erase: 删除 unordered_map 中的指定元素或范围内的元素。
4. 查找操作:
   - find: 查找指定键对应的迭代器,如果键不存在,则返回 unordered_map::end()。

5. 容量:
   - size: 返回 unordered_map 中键值对的数量。
   - empty: 检查 unordered_map 是否为空。
6. 哈希策略:
   - hash_function: 返回用于计算键的哈希值的函数对象。
   - bucket_count: 返回 unordered_map 中桶的数量。
7. 遍历操作:
   - 使用迭代器进行遍历,如范围循环 for (const auto& pair : unordered_map)。

8. 其他操作:
   - clear: 清空 unordered_map 中的所有元素。
   - swap: 交换两个 unordered_map 的内容。
unordered_map 还支持各种操作符和比较函数,以及其他高级功能,使得在处理键值对时更加方便和灵活。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/562718
推荐阅读
相关标签
  

闽ICP备14008679号