unordered_set 的初始化方法

发布时间 2023-08-22 21:56:17作者: ningao

unordered_set是一个哈希表的实现,因此初始化其实就是给它分配一定的空间,并且指定哈希表中每个元素的存储方式。

unordered_set的初始化方式有以下几种:

  1. 无参构造函数
std::unordered_set<int> mySet;

默认情况下,unordered_set会分配一定的内存,并且使用默认的哈希函数和比较函数。

  1. 拷贝构造函数
std::unordered_set<int> mySet(otherSet);

将另外一个unordered_set拷贝到当前的unordered_set中。

  1. 移动构造函数
std::unordered_set<int> mySet(std::move(otherSet));

将另外一个unordered_set移动到当前的unordered_set中。

  1. 初始化列表
std::unordered_set<int> mySet = {1, 2, 3};

使用大括号{}来初始化unordered_set。

  1. 迭代器
std::vector<int> vec = {1, 2, 3};
std::unordered_set<int> mySet(vec.begin(), vec.end());

使用迭代器来初始化unordered_set。这里是用vector作为示例,如果你有其他容器也可以使用它们的迭代器来初始化unordered_set。

  1. 自定义哈希函数和比较函数
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用于比较两个元素是否相等。