• 【STL】set集合


    构造函数

    std::set<std::string> myset;
    
    • 1

    这条指令将会创建一个空的set容器
    该容器会默认采用std::less< T >的排序规则对成员进行排序。
    这种排序方法适用于内置的数据类型,比如整型、浮点型、字符串等等。

    std::set<std::string> myset{"java","stl","python"};
    
    • 1

    如此同样可以进行创建,同时会对添加进入的成员进行排序和去重

    set<string> copyset(myset);
    
    • 1

    set也支持拷贝构造,同样也是一个强拷贝函数,将value值全部复制到新的容器中。

    自定义排序和去重方式

    当模板类型是结构体等的时候就需要用到自定义排序方式了。不然就会报错。
    可以通过重载运算符<或()的方式实现,以下介绍重载运算符<的实现方法;
    首先,重载**只能是重载<**而不能是<=、>=等运算符,几乎所有的方法或容器都需要排序来满足数学意义上的严格弱序化,否则这些方法或容器的行为将不可预知。
    set容器在插入新的值的时候,将会进行比较和去重。当a eg:
    在这里插入图片描述

    在这里插入图片描述

    其他常用函数

    成员方法功能
    begin()返回指向容器中第一个(注意,是已排好序的第一个)元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
    end()返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
    rbegin()返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
    rend()返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
    find(val)在 set 容器中查找值为 val 的元素,如果成功找到,则返回指向该元素的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
    lower_bound(val)返回一个指向当前 set 容器中第一个大于或等于 val 的元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
    upper_bound(val)返回一个指向当前 set 容器中第一个大于 val 的元素的迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。(效果和lower_bound())差不多
    empty()若容器为空,则返回 true;否则 false。
    size()返回当前 set 容器中存有元素的个数。
    insert()向 set 容器中插入元素。
    erase()删除 set 容器中存储的元素。
    swap()交换 2 个 set 容器中存储的所有元素。这意味着,操作的 2 个 set 容器的类型必须相同。
    clear()清空 set 容器中所有的元素,即令 set 容器的 size() 为 0。
    emplace()在当前 set 容器中的指定位置直接构造新元素。其效果和 insert() 一样,但效率更高。
    emplace_hint()在本质上和 emplace() 在 set 容器中构造新元素的方式是一样的,不同之处在于,使用者必须为该方法提供一个指示新元素生成位置的迭代器,并作为该方法的第一个参数。
    count(val)在当前 set 容器中,查找值为 val 的元素的个数,并返回。注意,由于 set 容器中各元素的值是唯一的,因此该函数的返回值最大为 1。因此可以用在一个假find()

    insert()函数是有一个返回指的。
    他的返回值是一个pair类型,pair的第一个值是一个指向插入元素的迭代器。
    第二个值是一个布尔类型,他代表是否成功插入(若此前存在插入值就会插入失败)
    emplace()方法的语法格式如下

    template <class ...Args>
    	pair<iterator,bool> emplace (Args&&... args);
    
    • 1
    • 2

    其中,参数(Args&&… args)指的是,只需要传入构建新元素所需要的数据即可,该方法可以自行利用这些数据构建出要添加的元素。

    multiset
    和set容器的区别在于,multiset容器中可以同时存储多个键相同的键值对,也就是说,它没有去重的功能。
    此外multiset的函数方法和set的一样。

  • 相关阅读:
    【Linux】软交换机Open vSwitch的移植
    【组合数学 隔板法 容斥原理】放球问题
    计算机毕业设计Java旅游官网(源码+mysql数据库+系统+lw文档)
    汽车产业与技术链分析
    2022暑期实习面经Java
    Python文件处理相关操作
    tomcat、nginx实现四层转发+七层代理+动静分离实验
    5G-Advanced核心网技术综述
    AutoDWG DWG 转换 PDF 控制组件-ActiveX
    Day4: 应用篇-1
  • 原文地址:https://blog.csdn.net/manerzi/article/details/128090003