结构体作为unordered_set的元素
时间: 2024-05-04 19:13:51 浏览: 15
结构体可以作为unordered_set的元素,unordered_set是C++标准库中的一个容器,用于存储唯一的元素,且元素的顺序是无序的。结构体作为unordered_set的元素时,需要满足以下条件:
1. 定义哈希函数:unordered_set使用哈希函数来确定元素的存储位置,因此需要为结构体定义一个哈希函数。哈希函数应该将结构体映射到一个唯一的整数值。
2. 定义相等比较函数:unordered_set使用相等比较函数来判断两个元素是否相等。相等比较函数应该比较结构体的各个成员变量是否相等。
下面是一个示例代码,演示了如何将结构体作为unordered_set的元素:
```cpp
#include <iostream>
#include <unordered_set>
// 定义结构体
struct Person {
std::string name;
int age;
};
// 定义哈希函数
struct PersonHash {
std::size_t operator()(const Person& p) const {
// 将name和age拼接后计算哈希值
return std::hash<std::string>()(p.name) ^ std::hash<int>()(p.age);
}
};
// 定义相等比较函数
struct PersonEqual {
bool operator()(const Person& p1, const Person& p2) const {
return p1.name == p2.name && p1.age == p2.age;
}
};
int main() {
// 创建unordered_set,并指定哈希函数和相等比较函数
std::unordered_set<Person, PersonHash, PersonEqual> personSet;
// 添加元素
Person p1{"Alice", 20};
Person p2{"Bob", 25};
Person p3{"Alice", 20};
personSet.insert(p1);
personSet.insert(p2);
personSet.insert(p3);
// 遍历输出元素
for (const auto& person : personSet) {
std::cout << "Name: " << person.name << ", Age: " << person.age << std::endl;
}
return 0;
}
```