set是基于红黑树的有序去重容器,支持O(log n)插入、删除与查找。1. 需包含头文件,可自定义排序如std::greater;2. 支持列表、区间等初始化方式;3. 常用操作有insert、erase、find、count等;4. 遍历可用范围for循环或正向/反向迭代器;5. 元素不可修改,自定义类型需重载

在C++中,set 是一个非常实用的关联式容器,它能自动对插入的元素进行排序,并保证元素的唯一性。set底层通常基于红黑树实现,因此插入、删除和查找操作的时间复杂度为 O(log n)。本文将详细介绍 set 容器的基本用法和遍历方式,帮助你高效使用它。
1. set 的基本定义与初始化
要使用 set,需要包含头文件 。定义一个 set 非常简单:
std::set mySet;
你也可以指定自定义排序规则,比如让 set 按降序排列:
立即学习“C++免费学习笔记(深入)”;
std::set> descendingSet;
支持的初始化方式包括:
空初始化:std::set s; 列表初始化:std::set s = {3, 1, 4, 1, 5}; // 自动去重并排序 从区间构造:std::set s(v.begin(), v.end());
2. 常用操作函数
set 提供了丰富的成员函数来管理数据:
insert(value):插入一个元素,若已存在则不插入 erase(value):删除指定值的元素 find(value):查找元素,返回迭代器,未找到返回 end() count(value):判断元素是否存在(返回 0 或 1) size():返回元素个数 empty():判断是否为空 clear():清空所有元素
示例:
mySet.insert(10);
mySet.insert(5);
mySet.insert(10); // 重复,不会插入
if (mySet.find(5) != mySet.end()) {
std::cout }
3. set 的遍历方法
由于 set 中的元素是自动排序的,遍历时会按顺序访问。常用的遍历方式有以下几种:
范围 for 循环(推荐):
for (const auto& elem : mySet) {
std::cout } 使用迭代器正向遍历:
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout } 反向遍历:
for (auto rit = mySet.rbegin(); rit != mySet.rend(); ++rit) {
std::cout }
4. 注意事项与技巧
使用 set 时需要注意一些细节:
元素类型必须支持比较操作(默认使用 不能通过迭代器修改 set 中的值(因为会影响排序结构),*it = newValue; 是非法的 如果需要存储自定义类型,需提供比较函数或重载 multiset 允许重复元素,行为类似 set 但允许 count > 1
例如定义结构体并用于 set:
struct Person {
std::string name;
int age;
bool operator};
std::set people;
基本上就这些。掌握 set 的插入、查找和遍历,能大幅提升编码效率,尤其适用于去重和有序存储场景。不复杂但容易忽略细节,多练习几次就能熟练使用。
以上就是c++++ set容器的用法和遍历_c++ set容器使用指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476737.html
微信扫一扫
支付宝扫一扫