unordered_map的查找
时间: 2023-05-24 17:04:23 浏览: 46
unordered_map使用哈希表实现查找,具有O(1)的平均查找时间复杂度,但是最坏情况下可能会出现O(n)的时间复杂度。其查找方式如下:
1.使用下标访问方式查找元素
例如,定义了一个unordered_map<int, string> map,可以使用下标方式访问map中的元素:
```cpp
string value = map[3]; //访问键值为3的元素
```
2.使用find函数查找元素
使用find函数可以直接查找指定的键值是否存在,如果存在,返回一个指向该元素的迭代器,否则返回一个指向map尾部的迭代器(即end()函数返回的迭代器)
```cpp
auto iter = map.find(3); //查找键值为3的元素
if(iter == map.end()){
//没有找到元素
}
else{
//找到了元素
string value = iter->second;
}
```
3.使用count函数判断元素是否存在
使用count函数可以判断指定的键值是否存在,如果存在返回1,否则返回0。
```cpp
if(map.count(3)){
//元素存在
}
else{
//元素不存在
}
```
相关问题
unordered_map 查找
unordered_map 提供了多种方法进行查找操作。下面介绍几种常用的查找方法:
1. 使用 find() 函数:可以使用 unordered_map 的 find() 函数来查找指定的键。它返回一个指向键值对的迭代器。如果找到了指定的键,则返回指向该键值对的迭代器;如果未找到,则返回指向 unordered_map 结尾的迭代器(即 end() 迭代器)。
示例代码:
```cpp
std::unordered_map<std::string, int> myMap;
myMap["apple"] = 1;
myMap["banana"] = 2;
auto it = myMap.find("apple");
if (it != myMap.end()) {
std::cout << "找到了键为 'apple' 的键值对,值为:" << it->second << std::endl;
} else {
std::cout << "未找到键为 'apple' 的键值对" << std::endl;
}
```
2. 使用 count() 函数:可以使用 unordered_map 的 count() 函数来统计指定键的数量。它返回一个整数,表示指定键在 unordered_map 中出现的次数。由于 unordered_map 中的键是唯一的,所以返回的结果要么是 0(未找到),要么是 1(找到)。
示例代码:
```cpp
std::unordered_map<std::string, int> myMap;
myMap["apple"] = 1;
myMap["banana"] = 2;
if (myMap.count("apple") > 0) {
std::cout << "找到了键为 'apple' 的键值对" << std::endl; } else {
std::cout << "未找到键为 'apple' 的键值对" << std::endl; }
```
3. 使用 [] 运算符:可以使用 unordered_map 的 [] 运算符来直接访问指定键对应的值。如果指定键存在,则返回对应的值;如果指定键不存在,则会插入一个新的键值对,并返回默认构造的值(对于整数类型,默认为 0)。
示例代码:
```cpp
std::unordered_map<std::string, int> myMap;
myMap["apple"] = 1;
myMap["banana"] = 2;
int value = myMap["apple"];
std::cout << "键为 'apple' 的值为:" << value << std::endl;
```
需要注意的是,在使用 find() 函数和 count() 函数时,要先判断迭代器是否等于 end() 迭代器,以避免访问不存在的迭代器导致的错误。同时,在使用 [] 运算符时,如果指定键不存在,会插入一个新的键值对。因此,在使用之前最好先使用 count() 函数或 find() 函数进行判断,以确保键是否存在。
双重unordered_map查找
双重unordered_map查找可以通过嵌套使用两个unordered_map来实现。首先,我们需要定义两个unordered_map对象,分别表示外层和内层的映射关系。然后,我们可以使用这两个unordered_map来进行双重查找操作。
下面是一个示例代码,演示了如何使用双重unordered_map进行查找:
```cpp
#include <unordered_map>
#include <iostream>
int main() {
// 定义外层和内层的unordered_map
std::unordered_map<int, std::unordered_map<int, std::string>> doubleMap;
// 向双重unordered_map中插入数据
doubleMap = "value_11";
doubleMap = "value_12";
doubleMap = "value_21";
doubleMap[2] = "value_22";
// 双重unordered_map的查找操作
int outerKey = 1;
int innerKey = 2;
if (doubleMap.count(outerKey) > 0 && doubleMap[outerKey].count(innerKey) > 0) {
std::cout << "Value found: " << doubleMap[outerKey][innerKey] << std::endl;
} else {
std::cout << "Value not found." << std::endl;
}
return 0;
}
```
在上面的示例中,我们首先定义了一个外层unordered_map,它的键是整数类型,值是一个内层unordered_map。内层unordered_map的键也是整数类型,值是一个字符串。然后,我们向双重unordered_map中插入了一些数据。
在查找操作中,我们可以使用count函数来判断外层和内层是否存在对应的键,然后通过双重索引访问到对应的值。
需要注意的是,双重unordered_map的查找操作的时间复杂度是O(1),因为unordered_map使用哈希表来实现,具有很快的查找速度。