在C++中,集合(set)是一种容器,它存储唯一的元素,而且这些元素按照某种排序规则自动排序。C++标准库提供了两种主要的集合类型:std::set
和std::unordered_set
。这两种集合都提供了一组方法来插入、删除、查找元素,并且它们的性能特点略有不同。
- std::set:
std::set
是基于红黑树实现的有序集合。它的元素按照排序规则自动排序,并且不允许重复元素。- 插入、删除、查找操作的时间复杂度都是 O(log n),其中 n 是集合中元素的数量。
std::set
的元素是不可变的,一旦插入到集合中就不能修改。- 需要包含头文件
<set>
。
#include <iostream>
#include <set>
int main() {
std::set<int> mySet;
// 插入元素
mySet.insert(10);
mySet.insert(5);
mySet.insert(15);
mySet.insert(5); // 不会被插入,因为集合中已经存在相同的元素
// 遍历集合
for (int num : mySet) {
std::cout << num << " ";
}
std::cout << std::endl;
// 删除元素
mySet.erase(10);
// 查找元素
if (mySet.find(5) != mySet.end()) {
std::cout << "5 存在于集合中" << std::endl;
} else {
std::cout << "5 不存在于集合中" << std::endl;
}
return 0;
}
- std::unordered_set:
std::unordered_set
是基于哈希表实现的无序集合。它的元素没有特定的顺序,并且不允许重复元素。- 插入、删除、查找操作的平均时间复杂度是 O(1),但在最坏情况下可能会是 O(n),其中 n 是集合中元素的数量。
std::unordered_set
的元素是不可变的,一旦插入到集合中就不能修改。- 需要包含头文件
<unordered_set>
。
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> myUnorderedSet;
// 插入元素
myUnorderedSet.insert(10);
myUnorderedSet.insert(5);
myUnorderedSet.insert(15);
myUnorderedSet.insert(5); // 不会被插入,因为集合中已经存在相同的元素
// 遍历集合
for (int num : myUnorderedSet) {
std::cout << num << " ";
}
std::cout << std::endl;
// 删除元素
myUnorderedSet.erase(10);
// 查找元素
if (myUnorderedSet.find(5) != myUnorderedSet.end()) {
std::cout << "5 存在于集合中" << std::endl;
} else {
std::cout << "5 不存在于集合中" << std::endl;
}
return 0;
}
这就是C++中集合的简要介绍。根据你的需求和性能要求,你可以选择使用有序集合 std::set
或无序集合 std::unordered_set
。