zoukankan      html  css  js  c++  java
  • 关于set和multiset的一些用法

    set的一些用法

    set的特性

    set的特性是,所有元素都会根据元素的键值自动排序,set不允许两个元素有相同的键值。

    set的一些常用操作函数

    • insert()

    insert(key_value); 将key_value插入到set中 ,返回值是pair<set::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。
    inset(first,second);将定位器first到second之间的元素插入到set中,返回值是void.

    /*代码示范*/
    #include <iostream> 
    #include <set>
    using namespace std;
    int main()
    {
    	int a[] = {1,2,3};
         set<int> s;
         set<int>::iterator iter;
         s.insert(a,a+3);
         for(iter = s.begin() ; iter != s.end() ; ++iter)
             cout<<*iter<<" ";
         cout<<endl;
         pair<set<int>::iterator,bool> pr;
         pr = s.insert(5);
         if(pr.second)
             cout<<*pr.first<<endl;
         return 0;
    }
    
    • erase()

    erase(iterator) ,删除定位器iterator指向的值
    erase(first,second),删除定位器first和second之间的值
    erase(key_value),删除键值key_value的值

    /*代码示范*/
    #include <iostream>
    #include <set> 
    using namespace std;
    int main()
    {
        set<int> s;
        set<int>::const_iterator iter;
        set<int>::iterator first;
        set<int>::iterator second;
        for(int i = 1 ; i <= 10 ; ++i)
            s.insert(i);
        //第一种删除
        s.erase(s.begin());
        //第二种删除
        first = s.begin();
        second = s.begin();
        second++;
        second++;
        s.erase(first,second);
        //第三种删除
        s.erase(8);
        cout<<"删除后 set 中元素是 :";
        for(iter = s.begin() ; iter != s.end() ; ++iter)
            cout<<*iter<<" ";
        cout<<endl;
        return 0;
    }
    
    • count()

    count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。

    • find()

    find() ,返回给定值值得定位器,如果没找到则返回end()。

    /*代码示范*/
    #include <iostream>
     #include <set>
    
    using namespace std;
    
    int main()
     {
         int a[] = {1,2,3};
         set<int> s(a,a+3);
         set<int>::iterator iter;
         if((iter = s.find(2)) != s.end())
        {
            cout<<*iter<<endl;//输出为2
        }
         return 0;
     }
    
    • lower_bound(key_value)和upper_bound(key_value)

    lower_bound(key_value) ,返回第一个大于等于key_value的定位器
    upper_bound(key_value),返回最后一个大于key_value的定位器

    自定义比较函数
    (1)元素不是结构体:

    struct myComp  
    {  
        bool operator()(const your_type &a,const your_type &b)  
        [  
            return a.data-b.data>0;  
        }  
    }  
    set<int,myComp>s;  
    ......  
    set<int,myComp>::iterator it;  
    

    (2)如果元素是结构体,可以直接将比较函数写在结构体内。

    struct Info  
    {  
        string name;  
        float score;  
        //重载“<”操作符,自定义排序规则  
        bool operator < (const Info &a) const  
        {  
            //按score从大到小排列  
            return a.score<score;  
        }  
    }  
    set<Info> s;  
    ......  
    set<Info>::iterator it;  
    

    multiset的用法

    multiset插入的元素可以相同

  • 相关阅读:
    [Python]机器学习:Tensorflow实现线性回归
    Python之Numpy:线性代数/矩阵运算
    特殊环境的安装教程[汇总]
    C/C++之编程语言学习资源
    Python之文件操作工具
    NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)
    网络分析:WireShark
    Linux/Window之定时任务脚本编写
    CSS之Background
    JavaScript之iframe页面间通信
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/10335706.html
Copyright © 2011-2022 走看看