std::unordered_set

std::unordered_set 的使用方法

std::unordered_set 是 C++ STL 库中的一个容器,它提供了一种无序集合的实现方式。它基于哈希表(hash table)来存储元素,并且具有常数时间的插入、删除和查找操作。

以下是 std::unordered_set 的一些常见用法:

  1. 声明和定义
#include <unordered_set>

std::unordered_set<int> myset;  // 创建一个空的 unordered_set
  1. 插入元素
myset.insert(42);  // 插入一个元素
myset.insert({1, 2, 3, 4});  // 插入多个元素
  1. 删除元素
myset.erase(42);  // 删除一个元素
myset.erase(myset.find(3), myset.end());  // 删除指定范围的元素
myset.clear();  // 删除所有元素
  1. 查找元素
if (myset.find(42) != myset.end()) {
    // 找到了 42
}
  1. 遍历元素
for (auto it = myset.begin(); it != myset.end(); ++it) {
    // 遍历 unordered_set
}
  1. 获取 unordered_set 的大小
std::size_t size = myset.size();
  1. 判断 unordered_set 是否为空
if (myset.empty()) {
    // unordered_set 为空
}
  1. 使用自定义哈希函数和相等比较函数
struct MyHash {
    std::size_t operator()(const MyType& val) const {
        // 自定义哈希函数的实现
    }
};

struct MyEqual {
    bool operator()(const MyType& lhs, const MyType& rhs) const {
        // 自定义相等比较函数的实现
    }
};

std::unordered_set<MyType, MyHash, MyEqual> myset;

以上就是 std::unordered_set 的一些基本用法,可以根据具体需求进行灵活运用。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误信息是因为 `unordered_set` 中的元素类型 `vector<int>` 并没有默认构造函数。因此,当你创建 `unordered_set<vector<int>>` 类型的对象时,会调用默认构造函数,但由于元素类型没有默认构造函数,所以会报错。 解决方法是使用自定义哈希函数,显式地指定哈希表的大小,或者使用其他支持类型的容器代替 `unordered_set<vector<int>>`。 以下是使用自定义哈希函数的示例代码: ```c++ #include <iostream> #include <unordered_set> #include <vector> struct VectorHash { std::size_t operator()(const std::vector<int>& v) const { std::size_t seed = v.size(); for(auto& i : v) { seed ^= i + 0x9e3779b9 + (seed << 6) + (seed >> 2); } return seed; } }; int main() { std::unordered_set<std::vector<int>, VectorHash> set; set.insert({1, 2, 3}); set.insert({4, 5, 6}); std::cout << set.size() << std::endl; // output: 2 return 0; } ``` 在这个示例中,我们定义了一个名为 `VectorHash` 的结构体,其中包含一个函数调用运算符 `operator()`,用于计算 `vector<int>` 类型的哈希值。在创建 `unordered_set<std::vector<int>, VectorHash>` 类型的对象时,我们将 `VectorHash` 结构体作为第二个模板参数传递给 `unordered_set`,从而使用自定义哈希函数。 需要注意的是,在哈希函数中,我们使用了一种叫做 MurmurHash 的哈希算法来计算哈希值。这是一种比较高效的哈希算法,可以参考相关文献了解更多细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值