std::unordered_map include
To use std::unordered_map in C++, you need to include the
#include <unordered_map>
Once you have included this header file, you can start using the std::unordered_map class in your code.
c++std::unordered_map
C++ 中 std::unordered_map
的使用方法
创建和初始化 std::unordered_map
可以创建一个空的 std::unordered_map
或者通过初始列表来填充它。
#include <iostream>
#include <unordered_map>
int main() {
// 创建一个空的 unordered_map
std::unordered_map<int, std::string> map;
// 插入键值对
map.insert({1, "one"});
map.emplace(2, "two");
// 使用初始列表创建并赋初值
std::unordered_map<int, std::string> initMap = {{3, "three"}, {4, "four"}};
}
访问元素
可以通过下标操作符访问已存在的键对应的值;如果该键不存在,则会自动插入一个新的默认构造的值。
// 假设已经有一个名为 myMap 的 std::unordered_map<int, double>
double value = myMap[key]; // 如果 key 存在则返回对应值,否则插入新项并将 value 设为0.0[^1]
迭代遍历
迭代器用于顺序访问容器内的所有元素。注意这里的顺序是没有定义过的,因为哈希表不保持任何特定顺序。
for (auto& pair : map) {
std::cout << "{" << pair.first << ": " << pair.second << "}\n";
}
查找与删除
提供了成员函数如 find()
来定位指定键的位置以及 erase()
函数移除单个或多个条目。
if (map.find(key) != map.end()) {
// 键存在时的操作...
}
// 删除某个具体的键
map.erase(specificKey);
// 清空整个映射
map.clear();
处理冲突
虽然内部实现细节通常由标准库处理,但在某些情况下可能需要考虑负载因子(load factor),即桶的数量相对于存储项目数的比例。当这个比例过高时可能会降低效率,因此有时有必要调整最大负载因子以优化性能。
float currentLoadFactor = map.load_factor(); // 获取当前负载因子
size_t bucketCount = map.bucket_count(); // 获取桶数量
map.max_load_factor(0.75f); // 设置新的最大负载因子
map.rehash(bucketCount * 2); // 请求至少两倍于现有桶数的新桶数目
std::unordered_map查找
std::unordered_map是C++标准库中的一个关联容器,它提供了一种快速查找和插入键值对的方式。unordered_map使用哈希表来实现,因此查找操作的平均时间复杂度为O(1)。
要在unordered_map中进行查找,可以使用成员函数find()或者count()。find()函数返回一个迭代器,指向要查找的键值对,如果未找到,则返回unordered_map的end()迭代器。count()函数返回指定键的数量,如果存在则返回1,否则返回0。
以下是使用std::unordered_map进行查找的示例代码:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> myMap = {
{1, "apple"},
{2, "banana"},
{3, "orange"}
};
// 使用find()函数进行查找
auto it = myMap.find(2);
if (it != myMap.end()) {
std::cout << "Key found! Value is: " << it->second << std::endl;
} else {
std::cout << "Key not found!" << std::endl;
}
// 使用count()函数进行查找
if (myMap.count(3) > 0) {
std::cout << "Key found!" << std::endl;
} else {
std::cout << "Key not found!" << std::endl;
}
return 0;
}
相关推荐
















