Set容器简介

Set是C++标准模板库(STL)中的一种关联容器,用于存储一组不重复的元素,并且会自动对元素进行排序。Set容器的特点是元素不重复且有序。

特性:

  1. 自动排序: Set容器会根据元素的键值自动进行排序,因此可以保证集合中的元素是有序的。
  2. 元素唯一: Set容器会自动确保集合中不包含重复的元素,每个元素只能出现一次。

优点:

  1. 快速查找: 在Set容器中查找特定元素的速度非常快,时间复杂度为O(log n)。
  2. 唯一性: Set容器确保集合中不包含重复的元素,适用于需要维护唯一性的场景。
  3. 自动排序: Set容器会自动对元素进行排序,无需手动操作。

缺点:

  1. 插入和删除相对较慢: 由于Set容器需要维护元素的有序性,插入和删除元素时可能会导致元素的重新排序,性能略低于其他容器。
  2. 不支持随机访问: Set容器中的元素是自动排序的,因此不支持通过索引进行随机访问。

适用范围:

  1. 当需要存储一组不重复的元素,并且希望这些元素是有序的时,可以选择使用Set容器。
  2. 当需要快速查找特定元素并确保唯一性时,Set容器是一个不错的选择。
  3. 在需要实现一些集合运算,如并集、交集、差集等操作时,Set容器也可以发挥作用。

常用成员函数简介:

  • insert(const value_type& val): 在Set容器中插入值为val的元素。
  • erase(const value_type& val): 从Set容器中删除值为val的元素。
  • find(const value_type& val): 查找值为val的元素是否存在于Set容器中,如果存在,则返回指向该元素的迭代器;否则返回end()迭代器。
  • size(): 返回Set容器中元素的个数。
  • empty(): 判断Set容器是否为空,如果为空则返回true,否则返回false
  • clear(): 清空Set容器中的所有元素。
  • begin(): 返回指向第一个元素的迭代器。
  • end(): 返回指向超出最后一个元素的迭代器。
    #include <iostream>
    #include <set>
    #include <algorithm>
    #include<numeric>
    
    int main() {
        // 创建一个空的 std::set
        std::set<int> mySet = {2,6,78,20};
    
        // 插入元素
        mySet.insert(10);
        mySet.insert(20);
    
        // 插入数据的方法
        // 方法1:使用 insert() 函数插入单个元素
        mySet.insert(10);
    
        // 方法2:使用 emplace() 函数插入单个元素
        mySet.emplace(20);
    
        // 方法3:使用 insert() 函数的范围版本插入多个元素
        std::set<int> anotherSet;
        anotherSet.insert(mySet.begin(), mySet.end());
        //打印数据
        for (auto it = mySet.begin(); it != mySet.end(); ++it) {
            std::cout << *it << " ";
        }
        std::cout << std::endl;
    
        // 删除数据的方法
        // 方法1:使用 erase() 函数删除指定元素
        mySet.erase(10);
    
        // 方法2:使用 erase() 函数的迭代器版本删除指定元素
        auto it = mySet.find(20);
        if (it != mySet.end()) {
            mySet.erase(it);
        }
    
        // 方法3:使用 clear() 函数清空集合中的所有元素
        anotherSet.clear();
    
        // 遍历 set 并打印元素
        std::cout << "Set elements: ";
        for (int num : mySet) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    
        // 查找元素
        it = mySet.find(20);
        if (it != mySet.end()) {
            std::cout << "Element 20 found in set" << std::endl;
        }
        else {
            std::cout << "Element 20 not found in set" << std::endl;
        }
    
    
        // 使用标准算法对 set 进行操作
        // 计算 set 中元素的总和
        int sum = std::accumulate(mySet.begin(), mySet.end(), 0);
        std::cout << "Sum of set elements: " << sum << std::endl;
    
        // 查找 set 中的最小元素
        auto minElement = *std::min_element(mySet.begin(), mySet.end());
        std::cout << "Minimum element in set: " << minElement << std::endl;
    
        // 查找 set 中的最大元素
        auto maxElement = *std::max_element(mySet.begin(), mySet.end());
        std::cout << "Maximum element in set: " << maxElement << std::endl;
    
        return 0;
    }
    

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值