定义结构体unordered_map并插入数据
时间: 2024-03-29 18:33:10 浏览: 19
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的哈希函数
在C++中,可以通过自定义哈希函数来为`unordered_map`提供自定义的键值对哈希算法。下面是一种常见的自定义哈希函数的实现方式:
1. 创建一个结构体或类,命名为`HashFunc`,用于封装自定义的哈希函数。
2. 在`HashFunc`中定义一个重载的函数调用运算符`operator()`,该函数接受一个键值对作为参数,并返回一个哈希值。
3. 在`operator()`函数中,根据键值对的特征,计算出一个唯一的哈希值,并返回该值。
下面是一个示例代码,展示了如何自定义`unordered_map`的哈希函数:
```cpp
#include <iostream>
#include <unordered_map>
#include <string>
// 自定义哈希函数
struct HashFunc {
std::size_t operator()(const std::pair<int, std::string>& p) const {
// 根据键值对的特征计算哈希值
std::size_t hashValue = std::hash<int>{}(p.first);
hashValue ^= std::hash<std::string>{}(p.second) + 0x9e3779b9 + (hashValue << 6) + (hashValue >> 2);
return hashValue;
}
};
int main() {
// 创建一个使用自定义哈希函数的unordered_map
std::unordered_map<std::pair<int, std::string>, int, HashFunc> myMap;
// 向unordered_map中插入键值对
myMap[{1, "apple"}] = 10;
myMap[{2, "banana"}] = 20;
// 访问unordered_map中的元素
std::cout << myMap[{1, "apple"}] << std::endl; // 输出:10
std::cout << myMap[{2, "banana"}] << std::endl; // 输出:20
return 0;
}
```
在上述示例代码中,我们创建了一个使用自定义哈希函数`HashFunc`的`unordered_map`,并通过`std::pair<int, std::string>`作为键类型。`HashFunc`中的`operator()`函数根据键值对的特征计算哈希值,并返回该值。