您的位置:首页 > 科技 > IT业 > c++ unordered_map的用法

c++ unordered_map的用法

2024/12/27 6:23:51 来源:https://blog.csdn.net/HJQD777/article/details/141835347  浏览:    关键词:c++ unordered_map的用法

std::unordered_map 是 C++ 标准库中的一个容器,用于存储键值对(key-value pairs)。它提供了基于哈希表的实现,可以在常数时间内进行大部分插入、删除和查找操作。以下是关于 std::unordered_map 的用法,包括基本操作和示例代码。

1. 头文件

在使用 std::unordered_map 之前,需要包含相应的头文件:

#include <unordered_map>

2. 定义和初始化

可以使用以下方式定义和初始化 std::unordered_map

std::unordered_map<int, std::string> myMap; // 键为 int,值为 std::string

也可以使用初始化列表

std::unordered_map<int, std::string> myMap = {{1, "one"},{2, "two"},{3, "three"}
};

3. 基本操作

a. 插入元素

有几种方法可以插入元素:

myMap[4] = "four"; // 通过下标操作插入
myMap.insert({5, "five"}); // 使用 insert 方法
myMap.emplace(6, "six"); // 使用 emplace 直接构造对象
b. 查找元素

可以使用 find 方法或下标操作查找元素:

auto it = myMap.find(2); // 查找键为 2 的元素
if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl; // 输出对应的值
}std::string value = myMap[3]; // 直接访问,若键不存在则插入默认值
c. 删除元素

可以使用 erase 方法删除元素:

myMap.erase(2); // 删除键为 2 的元素
d. 遍历元素

可以使用范围 for 循环遍历 unordered_map

for (const auto& pair : myMap) {std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
e. 获取大小和检查是否为空

可以使用 size 和 empty 方法:

std::cout << "Size: " << myMap.size() << std::endl; // 获取元素个数
if (myMap.empty()) {std::cout << "The map is empty." << std::endl;
}

4. 示例代码

以下是一个完整的示例代码,演示了 std::unordered_map 的基本用法:

#include <iostream>
#include <unordered_map>
#include <string>int main() {// 定义一个 unordered_mapstd::unordered_map<int, std::string> myMap;// 插入元素myMap[1] = "one";myMap.insert({2, "two"});myMap.emplace(3, "three");// 查找元素auto it = myMap.find(2);if (it != myMap.end()) {std::cout << "Found: " << it->second << std::endl;}// 遍历元素for (const auto& pair : myMap) {std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;}// 删除元素myMap.erase(1);// 输出大小std::cout << "Size after deleting key 1: " << myMap.size() << std::endl;return 0;
}

5. 注意事项

  • 哈希函数std::unordered_map 使用哈希函数来管理键的存储。默认情况下,使用标准的哈希函数,但可以提供自定义哈希函数。

  • 迭代顺序:由于使用哈希表,std::unordered_map 中元素的迭代顺序是不确定的。

  • 内存使用std::unordered_map 可能会比 std::map 使用更多的内存,因为它需要存储额外的信息(如哈希表的桶)。

  • 异常安全:大多数操作在异常安全方面是强的,尤其是在插入和删除时。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com