unordered_set是一个哈希表的实现,因此初始化其实就是给它分配一定的空间,并且指定哈希表中每个元素的存储方式。
unordered_set的初始化方式有以下几种:
- 无参构造函数
std::unordered_set<int> mySet;
默认情况下,unordered_set会分配一定的内存,并且使用默认的哈希函数和比较函数。
- 拷贝构造函数
std::unordered_set<int> mySet(otherSet);
将另外一个unordered_set拷贝到当前的unordered_set中。
- 移动构造函数
std::unordered_set<int> mySet(std::move(otherSet));
将另外一个unordered_set移动到当前的unordered_set中。
- 初始化列表
std::unordered_set<int> mySet = {1, 2, 3};
使用大括号{}来初始化unordered_set。
- 迭代器
std::vector<int> vec = {1, 2, 3};
std::unordered_set<int> mySet(vec.begin(), vec.end());
使用迭代器来初始化unordered_set。这里是用vector作为示例,如果你有其他容器也可以使用它们的迭代器来初始化unordered_set。
- 自定义哈希函数和比较函数
struct MyHash {
std::size_t operator()(const Person& p) const {
return std::hash<std::string>()(p.getName()) ^ std::hash<int>()(p.getAge());
}
};
struct MyEqual {
bool operator()(const Person& lhs, const Person& rhs) const {
return lhs.getName() == rhs.getName() && lhs.getAge() == rhs.getAge();
}
};
std::unordered_set<Person, MyHash, MyEqual> mySet;
这里我们自定义了哈希函数和比较函数,可以对自定义的类型进行unordered_set初始化。其中MyHash用于计算哈希值,MyEqual用于比较两个元素是否相等。
标签:std,初始化,set,mySet,哈希,unordered From: https://www.cnblogs.com/ningao/p/17649798.html