C++ 标准库 <unordered_map>

C++ 标准库 <unordered_map>

在 C++ 中,<unordered_map> 是标准模板库(STL)的一部分,提供了一种基于哈希表的键值对容器。

与 std::map 不同,unordered_map 不保证元素的排序,但通常提供更快的查找速度。

unordered_map 是一个关联容器,它存储了键值对(key-value pairs),其中每个键(key)都是唯一的。unordered_map 使用哈希表来存储元素,这使得它在查找、插入和删除操作中具有平均常数时间复杂度。

语法

以下是 unordered_map 的基本语法:

#include <unordered_map>

std::unordered_map<key_type, value_type> map_name;
  • key_type 是键的类型。
  • value_type 是值的类型。

构造函数

unordered_map 可以以多种方式构造:

// 默认构造
std::unordered_map<int, std::string> myMap;

// 构造并初始化
std::unordered_map<int, std::string> myMap = {
  
  {1, "one"}, {2, "two"}};

// 构造并指定初始容量
std::unordered_map<int, std::string> myMap(10);

// 构造并复制另一个 unordered_map
std::unordered_map<int, std::string> anotherMap = myMap;

基本操作

插入元素:

myMap.insert({3, "three"});

访问元素:

std::string value = myMap[1]; // 获取键为1的值

删除元素:

myMap.erase(1); // 删除键为1的元素

查找元素:

auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end())
{
    std::cout << "Found: " << it->second << std::endl;
}

实例

下面是一个使用 unordered_map 的简单实例,包括输出结果。

#include <iostream>
#include <unordered_map>

int main() 
{
    //创建一个 unordered_map,键为 int,值为 string
    std::unordered_map<int, std::string> myMap;

    //插入一些键值对
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    //打印所有元素
    for (const auto& pair : myMap) 
    {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    //访问特定键的值
    std::cout << "Value for key 2: " << myMap[2] << std::endl;

    //删除键为1的元素
    myMap.erase(1);

    //再次打印所有元素
    std::cout << "After erasing key 1:" << std::endl;
    for (const auto& pair : myMap) 
    {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    return 0;
}

输出结果:

Key: 1, Value: one
Key: 2, Value: two
Key: 3, Value: three
Value for key 2: two
After erasing key 1:
Key: 2, Value: two
Key: 3, Value: three

注意事项

  • unordered_map 不保证元素的顺序,因此元素的迭代顺序可能在不同的运行中不同。
  • 哈希表的性能依赖于良好的哈希函数,以避免过多的哈希冲突。
  • 与 std::map 相比,unordered_map 在元素数量较少时可能占用更多的内存。

### C++中 `#include <unordered_map>` 的作用及用法 `#include <unordered_map>` 是用于引入 C++ 标准模板库 (STL) 中的 `unordered_map` 容器的头文件。该容器是一种基于哈希表的数据结构,允许通过键值对的形式存储数据,并提供平均时间复杂度为 O(1) 的查找、插入和删除操作[^2]。 以下是关于 `unordered_map` 的详细介绍: #### 1. 基本概念 `unordered_map` 是一种关联式容器,类似于 `map`,但它不保持按键排序的功能。相反,它利用哈希函数来定位键的位置,从而实现了更快的操作速度。由于其内部实现方式的不同,`unordered_map` 提供了常数级别的访问效率,而 `map` 则依赖于红黑树结构,具有对数级的时间复杂度 \(O(\log n)\)。 #### 2. 头文件的作用 为了使用 `unordered_map` 类型及其方法,在程序中必须显式包含 `<unordered_map>` 这一标准头文件。此头文件定义了 `std::unordered_map` 模板类以及相关的迭代器和其他辅助工具。 #### 3. 创建与初始化 可以像下面这样创建并初始化一个简单的 `unordered_map` 对象: ```cpp #include <iostream> #include <unordered_map> int main() { std::unordered_map<std::string, int> umap; // 插入元素 umap["apple"] = 50; umap["banana"] = 30; return 0; } ``` 上述代码片段展示了如何声明一个字符串到整数映射关系的无序字典,并向其中添加两个条目[^1]。 #### 4. 主要成员函数 - **insert**: 显式地将新键值对加入集合。 - **find**: 查找特定键是否存在;返回指向目标位置或者结束标志(end()) 的迭代器。 - **erase**: 删除指定键对应的记录项。 - **count**: 统计某给定关键字的数量(对于 unordered_map 来说总是要么是零要么是一)。 这些基本功能使得管理大量动态变化的数据变得简单高效。 #### 5. 性能特点 相比传统的 `map` 结构,当应用程序仅需频繁执行随机存取而不关心项目间的相对次序时,选用 `unordered_map` 可显著提升性能表现。 ```cpp // 示例演示 find 方法的应用 if (umap.find("orange") != umap.end()) { std::cout << "Orange found!" << '\n'; } else { std::cout << "No orange.\n"; } ``` 以上例子说明了怎样判断某个水果名称是否已经存在于我们的库存列表里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值