21xrx.com
2024-09-20 08:14:17 Friday
登录
文章检索 我的文章 写文章
C++ 无序集合(unordered_set)
2023-07-12 18:10:15 深夜i     --     --
C++ 无序集合 unordered_set

C++ 中的无序集合(unordered_set)是一个容器,它允许存储不同类型的值,并根据值的哈希值排序。相较于有序集合,无序集合更为高效,因为它使用哈希表进行实现,而哈希表可以在常数时间内进行插入、删除和查找操作,而不管集合中存储的元素有多少个。

在 C++ 中,使用无序集合非常简单。只需要包含头文件 并定义一个无序集合对象即可。以下是一个示例代码:


#include <unordered_set>

#include <iostream>

int main() {

  std::unordered_set<int> mySet = 4;

  

  mySet.insert(6);

  mySet.erase(2);

  

  for(auto it = mySet.begin(); it != mySet.end(); ++it) {

    std::cout << *it << std::endl;

  }

  

  return 0;

}

在这个示例中,我们定义了一个无序集合对象 mySet,并在其中插入了一些元素。我们还在集合中插入了一个新元素 6,并删除了元素 2。最后,我们使用 for 循环遍历集合中的所有元素,并将其输出。

无序集合还有一个有用的特性,就是可以使用自定义类型作为其键值,只要该类型定义了哈希函数和相等函数。以下是一个示例代码:


#include <unordered_set>

#include <iostream>

struct Person {

  std::string name;

  int age;

  

  bool operator==(const Person& other) const // 自定义相等函数

    return name == other.name && age == other.age;

  

};

namespace std {

  template<> struct hash<Person> { // 自定义哈希函数

    size_t operator()(const Person& p) const {

      return hash<std::string>()(p.name) ^ hash<int>()(p.age);

    }

  };

}

int main() {

  std::unordered_set<Person> mySet = { 20, 30, 25};

  

  mySet.insert("Dave");

  

  for(auto it = mySet.begin(); it != mySet.end(); ++it)

    std::cout << it->name << "

  

  return 0;

}

在这个示例中,我们定义了一个名为 Person 的自定义类型,并在其内部定义了一个相等函数和一个哈希函数。然后,我们在无序集合中插入了几个 Person 对象,并使用 for 循环遍历集合中的所有元素,并将其输出。

总的来说,无序集合是一种高效的容器,在 C++ 中使用也非常方便。无序集合使用哈希表进行实现,可以在常数时间内进行插入、删除和查找操作,同时也支持自定义类型作为键值。如果你需要一个高效并且易用的容器来存储你的数据,那么无序集合应该是一个不错的选择。

  
  

评论区

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