set函数的用法

set()是python中的一个内置函数。功能强大。可以用于数据的筛选。

1. set().add()  : 往set的后面加数据

2.set().pop()  : 删除set的最后一个数据,并返回该值

3.set().discard()  : 删除set中的某个值,可以指定。

a=[1,3,2,3,0]
b=set(a)  # {0,1,2,3}
b.add(0)  # {0,1,2,3}
b.pop()  # 3
b.pop()  # 2
b.discard(1)  # {0}

可以看见,set()中的数据不会重复。强行加入已经存在的值是不可行。

<think>我们被要求回答关于C++ set容器常用函数使用方法的问题。根据引用[2]和引用[3],我们可以总结set容器的基本操作和常用函数set容器是关联容器,底层实现是二叉树(通常是红黑树),它自动对元素进行排序(默认升序)并且具有去重功能(每个元素唯一)。multiset则允许重复元素。 常用函数包括: 1. 构造函数:创建set对象 2. 插入元素:insert() 3. 删除元素:erase() 4. 查找元素:find() 5. 遍历:使用迭代器 6. 其他:size(), empty(), clear()等 我们将详细解释这些函数用法,并给出示例代码(注意:代码示例需要符合C++语法,并且使用中文注释)。 注意:由于引用中提供的代码片段是C++代码,我们将用代码块展示,并尽量使用引用中的例子。 另外,根据系统级指令,我们需要在行内数学表达式使用$...$,独立公式使用$$...$$,但这个问题中可能没有数学公式,所以主要关注代码和中文描述。 同时,我们需要在最后生成相关问题。 步骤: 1. 介绍set容器的基本概念。 2. 逐一介绍常用函数,包括构造函数、插入、删除、查找等,并给出代码示例。 3. 总结set容器的特点。 4. 生成相关问题。 注意:引用[3]中有一个示例,我们可以参考它来展示插入、删除和查找。 开始回答:</think>### C++ set容器常用函数使用方法详解 `set`是C++标准模板库(STL)中的关联容器,底层通过红黑树(平衡二叉搜索树)实现,具有**自动排序**和**元素唯一性**的特性。以下是核心函数的使用方法及示例: --- #### **1. 初始化与构造** ```cpp #include <set> using namespace std; // 默认构造(升序) set<int> s1; // 初始化列表构造 set<int> s2 = {5, 3, 1, 4, 2}; // 自动排序为 {1,2,3,4,5} // 迭代器范围构造 vector<int> vec = {10, 20, 30}; set<int> s3(vec.begin(), vec.end()); // {10,20,30} // 降序集合 set<int, greater<int>> s4; // 元素按降序排列 ``` --- #### **2. 元素插入** ```cpp set<int> s; s.insert(30); // 插入单个元素 s.insert({10, 20}); // 插入多个元素 // 检查插入结果 auto ret = s.insert(30); if (!ret.second) { cout << "30已存在,插入失败"; // set元素唯一,重复插入失败 } ``` --- #### **3. 元素删除** ```cpp set<int> s = {1, 2, 3, 4, 5}; s.erase(3); // 删除值为3的元素 auto it = s.find(2); // 查找元素 if (it != s.end()) { s.erase(it); // 通过迭代器删除 } s.erase(s.begin(), next(s.begin(), 2)); // 删除前两个元素 ``` --- #### **4. 查找与统计** ```cpp set<int> s = {10, 20, 30, 40}; // 查找元素 auto pos = s.find(20); if (pos != s.end()) { cout << "找到20"; // 输出 } // 统计出现次数(set中结果为0或1) int count = s.count(30); // 返回1 ``` --- #### **5. 容量与遍历** ```cpp set<int> s = {5, 1, 4}; cout << s.size(); // 输出元素数量:3 cout << s.empty(); // 判断是否为空:0(false) // 正向遍历(升序) for (auto it = s.begin(); it != s.end(); ++it) { cout << *it << " "; // 输出:1 4 5 } // 反向遍历 for (auto rit = s.rbegin(); rit != s.rend(); ++rit) { cout << *rit << " "; // 输出:5 4 1 } ``` --- #### **6. 其他关键函数** ```cpp set<int> s = {2, 4, 6, 8}; s.clear(); // 清空所有元素 // 边界值访问 auto lower = s.lower_bound(4); // 首个>=4的元素迭代器 auto upper = s.upper_bound(6); // 首个>6的元素迭代器 ``` --- ### 特性总结 - **自动排序**:元素插入后按升序排列(可自定义比较器)。 - **元素唯一**:重复插入无效(需去重时优先使用`set`,允许重复用`multiset`)。 - **高效操作**:插入、删除、查找时间复杂度均为 $O(\log n)$[^2]。 --- ### 相关问题 1. `set`和`unordered_set`在底层实现和性能上有何区别? 2. 如何自定义`set`容器的排序规则(例如按结构体特定字段排序)? 3. `multiset`与`set`的使用场景有何不同? 4. `set`的`lower_bound()`和`upper_bound()`函数在区间查询中如何应用? [^1]: C++刷LeetCode常用容器和函数,详解C++STL容器系列(一)—— vector的详细用法和底层原理 [^2]: set容器的底层实现是二叉树,在插入元素的时候会自动进行升序的排序操作 [^3]: 从set容器中删除单个元素(搭配find使用) [^4]: C++常用容器成员函数用法总结
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值