定义结构体unordered_map并插入数据
时间: 2024-03-29 17:33:10 浏览: 67
unordered_map是C++标准库中的一个容器,它提供了一种键值对的映射关系。在使用unordered_map之前,需要包含头文件<unordered_map>。
定义unordered_map的语法如下:
```cpp
std::unordered_map<Key, T> myMap;
```
其中,Key表示键的类型,T表示值的类型。可以根据实际需求选择不同的类型。
插入数据到unordered_map可以使用insert函数或者使用下标操作符[]。下面是两种方式的示例代码:
使用insert函数插入数据:
```cpp
std::unordered_map<int, std::string> myMap;
myMap.insert(std::make_pair(1, "apple"));
myMap.insert(std::make_pair(2, "banana"));
```
使用下标操作符[]插入数据:
```cpp
std::unordered_map<int, std::string> myMap;
myMap[1] = "apple";
myMap[2] = "banana";
```
注意,如果使用下标操作符[]插入数据时,如果键已经存在,则会更新对应的值;如果键不存在,则会创建一个新的键值对。
相关问题
unordered_map复杂数据类型
在C++中,`unordered_map`是一个哈希表的实现,它可以用来存储键值对。`unordered_map`可以存储复杂数据类型作为键和值。要存储复杂数据类型,你需要定义一个自定义的哈希函数和相等比较函数。
下面是一个示例,展示如何使用`unordered_map`存储自定义的复杂数据类型:
```cpp
#include <iostream>
#include <unordered_map>
#include <string>
struct ComplexData {
int id;
std::string name;
// 重载==运算符
bool operator==(const ComplexData& other) const {
return id == other.id && name == other.name;
}
};
// 自定义哈希函数
struct ComplexDataHash {
std::size_t operator()(const ComplexData& data) const {
// 这里可以使用任何合适的哈希算法
std::size_t hash = std::hash<int>{}(data.id);
hash ^= std::hash<std::string>{}(data.name) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
return hash;
}
};
int main() {
std::unordered_map<ComplexData, int, ComplexDataHash> dataMap;
ComplexData data1{1, "John"};
ComplexData data2{2, "Alice"};
dataMap[data1] = 10;
dataMap[data2] = 20;
std::cout << dataMap[data1] << std::endl; // 输出 10
std::cout << dataMap[data2] << std::endl; // 输出 20
return 0;
}
```
在上面的示例中,我们定义了一个名为`ComplexData`的结构体,它包含一个整型的id和一个字符串的name。我们重载了`==`运算符,以便在比较两个`ComplexData`对象时使用。然后,我们定义了一个名为`ComplexDataHash`的结构体,它实现了自定义的哈希函数。
在`main()`函数中,我们创建了一个`unordered_map`,其中键的类型是`ComplexData`,值的类型是整型。我们将两个自定义数据类型作为键插入到`dataMap`中,并且可以使用它们进行查找和访问。
希望这个示例对你有帮助!如果还有其他问题,请随时提问。
unordered_map hash函数
unordered_map 是 C++ 中的一个容器,用于存储键值对,其中键是唯一的且无序的。在 unordered_map 中,hash 函数用于将键映射到桶(存储位置),以便实现快速的查找和插入操作。
默认情况下,unordered_map 使用 std::hash 作为其默认的哈希函数。std::hash 是一个通用的哈希函数对象,用于将不同类型的键转换为哈希值。它通过调用类型特定的哈希函数来执行这个转换。
如果你想使用自定义的哈希函数,你可以提供一个哈希函数对象作为 unordered_map 的第二个模板参数。这个哈希函数对象需要实现一个名为 operator() 的函数,接受一个键作为参数,并返回一个哈希值。
下面是一个使用自定义哈希函数的示例:
```cpp
#include <unordered_map>
#include <iostream>
struct MyHashFunction {
std::size_t operator()(const std::string& key) const {
// 自定义哈希算法
std::size_t hashValue = 0; for (char c : key) {
hashValue += c;
}
return hashValue;
}
};
int main() {
std::unordered_map<std::string, int, MyHashFunction> myMap;
// 使用自定义哈希函数插入键值对
myMap["apple"] = 1;
myMap["banana"] = 2;
// 访问键值对
std::cout << myMap["apple"] << std::endl;
std::cout << myMap["banana"] << std::endl;
return 0;
}
```
在上面的例子中,我们定义了一个名为 MyHashFunction 的结构体,它重载了 operator() 函数来实现自定义的哈希算法。然后我们将 MyHashFunction 作为 unordered_map 的第二个模板参数传递,以使用这个自定义的哈希函数。
请注意,自定义的哈希函数应该尽可能地生成均匀分布的哈希值,以避免键之间产生冲突,从而影响性能。
阅读全文