set的用法

本文详细介绍了C++ STL中的set容器,包括其特性和如何使用成员函数进行元素的增删查操作。通过实例展示了如何利用set自动排序的特性来管理键值唯一的元素集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。

set的各成员函数列表如下:

1.begin()--返回指向第一个元素的迭代器

2.clear()--清除所有元素

3.count()--返回某个值元素的个数

4.empty()--如果集合为空,返回true

5.end()--返回指向最后一个元素的迭代器

6.equal_range()--返回集合中与给定值相等的上下限的两个迭代器

7.erase()--删除集合中的元素

8.find()--返回一个指向被查找到元素的迭代器

9.get_allocator()--返回集合的分配器

10.insert()--在集合中插入元素

11.lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

12.key_comp()--返回一个用于元素间值比较的函数

13.max_size()--返回集合能容纳的元素的最大限值

14.rbegin()--返回指向集合中最后一个元素的反向迭代器

15.rend()--返回指向集合中第一个元素的反向迭代器

16.size()--集合中元素的数目

17.swap()--交换两个集合变量

18.upper_bound()--返回大于某个值元素的迭代器

19.value_comp()--返回一个用于比较元素间的值的函数

#include<set>
#include<iostream>
using namespace std;
int main()
{
    int i;
    int arr[5] = {0,1,2,3,4};
    set<int> iset(arr,arr+5);
    iset.insert(5);
    cout<<"size:"<<iset.size()<<endl;
    cout<<"3 count = "<<iset.count(3)<<endl;
    iset.erase(1);
    set<int>::iterator ite1 = iset.begin();
    set<int>::iterator ite2 = iset.end();
    for(;ite1!=ite2;ite1++)
    {
        cout<<*ite1;
    }
    cout<<endl;
    ite1 = iset.find(3);
    if(ite1!=iset.end())
        cout<<"3 found"<<endl;
    ite1 = iset.find(1);
    if(ite1!=iset.end())
        cout<<"1 not found"<<endl;
}


### Set用法在编程中的解释 #### 1. **Set 数据结构简介** 在多种编程语言中,`set` 是一种常见的数据结构,通常用来存储唯一的、无序的元素集合。这种特性使得 `set` 成为去重操作的理想工具[^5]。 --- #### 2. **C++ 中的 Set** 在 C++ 中,标准库提供了两种主要形式的 `set`:有序集(`std::set` 和 `std::multiset`)和无序集(`std::unordered_set`)。以下是其基本用法: - **定义与初始化** ```cpp #include <set> std::set<int> s1 = {3, 1, 4}; // 自动按升序排列 std::unordered_set<std::string> uset; // 无序集合 ``` - **插入与删除** ```cpp s1.insert(5); // 插入元素 if (!s1.empty()) { s1.erase(s1.begin()); // 删除第一个元素 } ``` - **查找操作** ```cpp if (s1.find(4) != s1.end()) { // 查找是否存在某个值 std::cout << "Found!" << std::endl; } ``` --- #### 3. **Python 中的 Set** Python 提供了内置的 `set` 类型,支持高效的成员检测、交集、并集等运算[^6]。 - **创建与操作** ```python my_set = {1, 2, 3} # 创建一个 set my_set.add(4) # 添加元素 my_set.remove(2) # 移除元素 print(my_set.pop()) # 随机移除并返回一个元素 ``` - **集合运算** ```python set_a = {1, 2, 3} set_b = {3, 4, 5} union_result = set_a.union(set_b) # 并集 intersection_result = set_a.intersection(set_b) # 交集 difference_result = set_a.difference(set_b) # 差集 symmetric_difference_result = set_a.symmetric_difference(set_b) # 对称差集 ``` --- #### 4. **JavaScript 中的 Set** ECMAScript 2015 引入了 `Set` 对象,允许开发者存储任何类型的唯一值[^7]。 - **基础用法** ```javascript let mySet = new Set(); mySet.add(1); mySet.add('string'); console.log(mySet.has(1)); // true mySet.delete('string'); // 删除特定元素 console.log(mySet.size); // 获取大小 ``` - **迭代器接口** ```javascript for (let item of mySet) { console.log(item); // 遍历每个元素 } ``` --- #### 5. **Java 中的 Set** Java 提供了多个实现类来满足不同的需求,比如 `HashSet`, `TreeSet` 和 `LinkedHashSet`[^8]。 - **实例化** ```java import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("apple"); set.add("banana"); System.out.println(set.contains("apple")); // true } } ``` - **遍历** ```java for (String fruit : set) { System.out.println(fruit); } ``` --- #### 性能考量 不同语言中的 `set` 实现可能基于哈希表或平衡树。例如,在 Python 和 Java 中,`set` 默认采用哈希表实现,因此平均时间复杂度接近 O(1)[^9]。而在 C++ 中,默认的 `std::set` 利用了红黑树,导致插入/删除的时间复杂度为 O(log n)[^10]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值