Set&Multiset

  set  和multiset 都会根据特定的排序规则将元素排序。区别在于multiset允许元素重复,而set不允许。

排序准则定义:1.反对称的 ,op(x,y)为真,则op(y,x) 为假。

                         2.可传递的,op(x,y)为真,op(y,z)为真,则op(x,z)为真。 

                         3.非自反的,op(x,x)永远为假。

set和multiset都以rb-tree实现。o(lgn)的复杂度,大大提升了排序的速度。

#include
   
   
    
    

namespace std
{
    template
    
    
     
     
      
      ,//定义排序准则,
             //如没有特别定义,就使用缺省准则less(operator<)
             class Allocator =allocator
      
      
       
        >//定义内存模型
    class set;
    template
       
        
        
          , class Allocator =allocator 
         
           > class multiset; } //Set和Multiset的构造 set 
          
            //以less(perator<)为排序准则 set 
           
             //以Op为排序准则 multiset 
            
              //以less(perator<)为排序准则 multiset 
             
               //以Op为排序准则 //非变动性操作 //Set和Multiset的非变动性操作 set< > c1,c2; c1.size();//返回容器大小 c1.empty();//判断容器是否为零 c1.max_size();//返回可容纳的最大元素数量 c1==c2; c1!=c2; c1 
              
                c2; c1<=c2; c1>=c2;//比较动作系列以“字典顺序”来判断两个容器是否相等 //但必须是同类型的 //Set和Multiset的搜寻函数 count(elem);//返回元素值为elem的元素个数 find(elem);//返回元素值为elem的第一个元素,找不到就返回end() lower_bound(elem);//返回elem<=元素值的第一个元素位置用于插入elem upper_bound(elem);//返回elem 
               <元素值的第一个元素位置用于插入elem equal_range(elem); 将lower_bound()和upper_bound()的返回值做成一个pair返回 所以返回的是一个区间 赋值 set和multiset的赋值操作 c1="c2;//将c2的值全部赋值给c1" c1.swap(c2); c1和c2的值全部互换 swap(c1,c2); 同上,但是全局函数 迭代器相关函数 set和multiset的迭代器相关函数 c.begin(); 指向第一元素的双向迭代器 c.end(); 指向最后一个元素的下一位的双向迭代器 c.rbegin(); 逆向遍历时的第一个元素,逆向迭代器 c.rend(); 逆向遍历时最后一个元素的下一位,逆向迭代器 set和multiset的元素插入和移除 c.insert(elem); 返回新元素的位置 c.insert(pos,elem); 返回新元素的位置(pos作为插入操作的提示) c.insert(beg,end); 将区间[beg,end]内所有的所有元素插入至c c.erase(elem); 删除与elem相等的所有元素,返回删除的个数 c.erase(pos); 删除迭代器pos上所指的元素,无返回值 c.erase(beg,end); 删除[beg,end]内的所有元素,无返回值 c.clear(); 清空c,删除全部元素 < code> 
               
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值