两者的区别

  • set不容许容器中有重复的元素,multiset允许容器中有重复的元素
  • set插入数据的同时会返回插入结果,表示插入是否成功
  • multiset不会检测数据,因此可以插入重复数据

Set构造和赋值

构造

#include<set>
set<T> st //默认构造函数
set(const set &st);//拷贝构造函数

特点

  1. 所有元素插入时自动被怕【被排序
  2. set容器不允许插入重复值,如果有不会报错,但是编译器会自动排掉

赋值

  • set& operator = (const set &st);//重载等号操作符
  • 然后直接等号赋值

函数操作

  • size()
  • swap(set st)
  • empty()
  • inset(elem)
  • clear()//删除所有元素
  • erase(pos)
  • erase(beg,end)//删除区间beg,end(左闭右开)的所有元素,返回下一个元素的迭代器
  • erase(elem)
  • find(key)//查找key是否存在,若存在则返回该元素的迭代器,若不存在,则返回set.end()
  • count(key)//统计key的元素个数

容器排序

  • 利用仿函数,可以改变排序规则
    1. set存放内置的数据类型
      1. 写仿函数//本质是一个类
        1. 写一个类,然后对bool operator()()进行重载,重写set内部的自动排序规则
      2. 在使用默认构造函数的时候set<T,自己定义的类>s2;
    2. set存放自定义的数据类型
      1. 写仿函数//区别就在此