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`用于访问当前键值对的值。

 

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main() {
    // 创建一个 unordered_map,键是学生姓名,值是年龄
    unordered_map<string, int> studentAge;

    // 向 unordered_map 中添加元素
    studentAge["Alice"] = 20;
    studentAge["Bob"] = 22;
    studentAge["Charlie"] = 21;

    // 访问元素并输出
    cout << "Alice's age: " << studentAge["Alice"] << endl;
    cout << "Bob's age: " << studentAge["Bob"] << endl;
    cout << "Charlie's age: " << studentAge["Charlie"] << endl;

    // 检查某个键是否存在
    string name = "David";
    if (studentAge.find(name) != studentAge.end()) {
        cout << name << "'s age: " << studentAge[name] << endl;
    } else {
        cout << name << " not found in the map." << endl;
    }

    // 删除某个键值对
    studentAge.erase("Charlie");

    // 遍历 unordered_map
    cout << "Student List:" << endl;
    for (const auto& pair : studentAge) {
        cout << "Name: " << pair.first << ", Age: " << pair.second << endl;
    }

    return 0;
}

--------

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 还支持各种操作符和比较函数,以及其他高级功能,使得在处理键值对时更加方便和灵活。

相关推荐

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

    2024-05-09 17:58:06       12 阅读
  2. C++中string容器元素访问

    2024-05-09 17:58:06       18 阅读
  3. C语言通过指针访问数组元素介绍

    2024-05-09 17:58:06       32 阅读
  4. C++关联容器

    2024-05-09 17:58:06       38 阅读
  5. c++关联容器详细介绍

    2024-05-09 17:58:06       31 阅读
  6. C++轮子 · STL关联容器

    2024-05-09 17:58:06       40 阅读
  7. 重启docker容器后,ssh无法访问且浏览器无法访问

    2024-05-09 17:58:06       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 17:58:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 17:58:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 17:58:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 17:58:06       20 阅读

热门阅读

  1. 05. 基于Verilog的呼吸灯程序设计

    2024-05-09 17:58:06       14 阅读
  2. numpy常用方法

    2024-05-09 17:58:06       11 阅读
  3. filebeat处理k8s docker模式下部署导致deviceid改变

    2024-05-09 17:58:06       12 阅读
  4. Python基础之流程控制语句

    2024-05-09 17:58:06       11 阅读
  5. css实现元素内容过高时自动出现展开收起按钮

    2024-05-09 17:58:06       14 阅读
  6. 25 | MySQL是怎么保证高可用的?

    2024-05-09 17:58:06       17 阅读