📅  最后修改于: 2023-12-03 14:39:50.455000             🧑  作者: Mango
在 C++ STL(标准模板库)中,set 与 unordered_set 都是用来存储一组数据的容器。二者最大的区别在于数据的存储方式不同,set 是使用红黑树实现的,而 unordered_set 是使用哈希表实现的。由于哈希表的实现方式比红黑树要高效,因此 unordered_set 在某些场景下会比 set 更快速。
可以使用 insert 方法向 set 中插入元素:
#include <set>
std::set<int> mySet;
mySet.insert(3);
mySet.insert(1);
mySet.insert(4);
此时 mySet 包含的元素为 {1, 3, 4}。
可以使用 erase 方法来删除 set 中的元素:
mySet.erase(3);
此时 mySet 包含的元素为 {1, 4}。
可以使用 find 方法来查找 set 中是否包含某个元素:
if (mySet.find(4) != mySet.end()) {
std::cout << "Element 4 found in set" << std::endl;
}
可以使用迭代器来遍历 set 中的元素:
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " ";
}
输出为:
1 4
可以使用 insert 方法向 unordered_set 中插入元素:
#include <unordered_set>
std::unordered_set<int> mySet;
mySet.insert(3);
mySet.insert(1);
mySet.insert(4);
mySet.insert(3); // 重复元素会被忽略
此时 mySet 包含的元素为 {1, 3, 4}。
可以使用 erase 方法来删除 unordered_set 中的元素:
mySet.erase(3);
此时 mySet 包含的元素为 {1, 4}。
可以使用 find 方法来查找 unordered_set 中是否包含某个元素:
if (mySet.find(4) != mySet.end()) {
std::cout << "Element 4 found in unordered_set" << std::endl;
}
可以使用迭代器来遍历 unordered_set 中的元素:
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " ";
}
输出为:
1 4
set 与 unordered_set 都可以存储一组数据,但使用场景不同。如果需要按照某种规则对数据进行排序并且不允许重复元素存在,则使用 set;否则,使用 unordered_set 更为便捷。需要注意的是,unordered_set 的查找、插入和删除操作的时间复杂度均为 O(1),而 set 的时间复杂度则是 O(log n),因此在某些场景下 unordered_set 可能会更快速一些。