关于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插入的元素可以相同

posted @ 2019-01-29 20:17  A-Little-Nut  阅读(383)  评论(0编辑  收藏  举报