21xrx.com
2024-12-23 06:38:58 Monday
登录
文章检索 我的文章 写文章
如何将自定义类型传入 unordered_set?
2023-07-03 17:19:50 深夜i     --     --
自定义类型 unordered_set 传入

unordered_set 是 C++ STL 中的一个容器,它用于存储唯一值的无序集合。当我们需要存储自定义类型的对象时,我们需要重载容器中的一些操作符并定义哈希函数,这样才能将自定义类型传入 unordered_set 中。

首先,我们需要定义一个结构体或类来表示自定义类型。在这个结构体或类中,我们需要定义一个哈希函数来计算该类型的哈希值。哈希值是用来确定元素在 unordered_set 容器中的位置的。

下面是一个示例代码:


#include <unordered_set>

#include <string>

using namespace std;

// 自定义类型

struct MyType {

  int id;

  string name;

  // 重载等于号操作符

  bool operator==(const MyType& other) const

    return id == other.id && name == other.name;

  

};

// 定义哈希函数

struct MyTypeHash {

  size_t operator()(const MyType& mt) const {

    return hash<int>()(mt.id) ^ hash<string>()(mt.name);

  }

};

// 测试程序

int main()

{

  unordered_set<MyType, MyTypeHash> myset;

  MyType mt1 = 1;

  MyType mt2 = "Bob";

  MyType mt3 = 3;

  myset.insert(mt1);

  myset.insert(mt2);

  myset.insert(mt3);

  return 0;

}

在上面的代码中,我们首先定义了一个自定义类型 MyType。然后,我们实现了一个重载了等于号操作符的 MyType 类。这个操作符用来判断两个 MyType 对象是否相等。接下来,我们定义了一个 MyTypeHash 结构体,它包含了一个用于计算 MyType 对象哈希值的运算符。在主函数中,我们使用了 unordered_set 来存储自定义类型 MyType 的对象。

总体来说,使用自定义类型时,我们需要重载等于号操作符和定义哈希函数,然后用 unordered_set<自定义类型,哈希函数> 来存储对象。这样,我们就可以将自定义类型传入 unordered_set 中了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复