set / multiset容器

介绍

○ . 所有元素都会根据元素的键值自动被排序,set元素的键值又是实值,set不允许两个元素有相同的键值;
○ . set的迭代器不允许改变set元素的值(会破坏set元素的排序规则);
○ . set和list有相同的性质,插入和删除操作都不会造成原有list迭代器的失效,只有被删除的元素的迭代器失效,其他迭代器不会受到影响。(除非删的是头结点);
○ . mutltiset 和set 唯一的区别是它允许键值重复,他两的底层实现是红黑树(平衡二叉树的一种)。

操作

  • 头文件 set
  • 插入insert 返回值是一个对组(迭代器,bool)在插入已有的值时,编译不会报错,由bool确定,如果已有相同的值不会插入,bool为false。
  • 查找: s1.begin()指向第一个元素,s1.end()并不是指向最后一个元素
  • count(key); //查找键key的元素个数,对于set来说不是1就是0
  • lower_bound(keyElem);//返回第一个key >= keyElem元素的迭代器。
  • upper_bound(keyElem);//返回第一个key > keyElem元素的迭代器。
  • equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器
    ○ . 上下限分别为lower_bound / upper_bound
  • set 是关联式容器,插入默认自动从小到大排序 从大到小排序,在插入之前就指定排序规则(用仿函数实现)
    自定义数据类型,在插入之前必须指定规则(仿函数实现)
    class mycompareperson
    {
    public:
    	bool operator()(const person &p1,const person &p2){
    		return p1.m_age > p2.m_age;
    	}
    };
    set<person,mycompareperson> s1;
    

你可能感兴趣的:(C++)