C++ set容器的核心优势是自动排序与元素唯一性,基于红黑树实现,插入、删除、查找时间复杂度为O(log n);通过指定比较器可自定义排序规则;与unordered_set相比,set有序但速度较慢,后者基于哈希表,平均O(1)操作但无序;适用于去重、唯一ID管理、查找表、索引构建及集合运算等场景。

C++
set
解决方案
set
使用
set
<set>
set
std::set<int> mySet;
set
立即学习“C++免费学习笔记(深入)”;
插入元素使用
insert()
mySet.insert(10);
mySet
set
insert()
遍历
set
#include <iostream>
#include <set>
int main() {
std::set<int> mySet;
mySet.insert(30);
mySet.insert(10);
mySet.insert(20);
mySet.insert(10); // 重复插入,不会生效
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " "; // 输出:10 20 30
}
std::cout << std::endl;
return 0;
}可以看到,
set
set
默认情况下,
set
<
例如,使用函数对象:
#include <iostream>
#include <set>
#include <cmath>
struct AbsCompare {
bool operator()(int a, int b) const {
return std::abs(a) < std::abs(b);
}
};
int main() {
std::set<int, AbsCompare> mySet;
mySet.insert(-10);
mySet.insert(5);
mySet.insert(-5);
mySet.insert(10);
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " "; // 输出:5 -5 -10 10
}
std::cout << std::endl;
return 0;
}或者使用 lambda 表达式:
#include <iostream>
#include <set>
#include <cmath>
int main() {
auto absCompare = [](int a, int b) { return std::abs(a) < std::abs(b); };
std::set<int, decltype(absCompare)> mySet(absCompare); // 需要传入比较器实例
mySet.insert(-10);
mySet.insert(5);
mySet.insert(-5);
mySet.insert(10);
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " "; // 输出:5 -5 -10 10
}
std::cout << std::endl;
return 0;
}注意,使用 lambda 表达式时,需要使用
decltype
set
set
unordered_set
set
unordered_set
set
unordered_set
由于红黑树的特性,
set
unordered_set
set
选择哪个容器取决于你的具体需求。如果需要保持元素的有序性,或者需要进行范围查找,那么
set
unordered_set
另外,
unordered_set
set
set
set
set
set
set
set
总的来说,
set
set
以上就是C++ set容器特点 自动排序去重功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号