📅  最后修改于: 2023-12-03 15:13:56.683000             🧑  作者: Mango
STL提供了两种不同的关联容器:set和unordered_set。本文将介绍这两种容器的区别、如何选择正确的容器以及它们的实现方式。
set和unordered_set都是关联容器,它们都可以用于存储一组元素,并支持如下操作:
不同之处在于它们内部如何组织和访问元素:
由于哈希表的实现方式,unordered_set的遍历时间复杂度要比set高,因为遍历哈希表的时候需要计算哈希值,但unordered_set的插入、删除和查找操作在大多数情况下要比set快。
正确选择set和unordered_set取决于你的具体需求。考虑以下因素:
set和unordered_set的实现方式都是在C++标准库中预定义的。以下是使用set和unordered_set的代码示例:
#include <iostream>
#include <set>
#include <unordered_set>
int main() {
// set example
std::set<int> s = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
for (const auto& elem : s) {
std::cout << elem << " "; // output: 1 2 3 4 5 6 9
}
// unordered_set example
std::unordered_set<int> us = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
for (const auto& elem : us) {
std::cout << elem << " "; // output: 9 1 4 3 5 6 2
}
return 0;
}
上述代码中,set按照元素的顺序输出,而unordered_set的输出顺序是随机的。
set和unordered_set都是C++ STL提供的关联容器,它们的实现方式和适用场景不同。在选择使用哪种容器时,需要考虑元素的顺序、数量和元素类型等因素。在实际应用中,set和unordered_set都是非常有用的容器,可以帮助我们高效地处理数据。