最后一个自由支配的暑假,学一些自己感兴趣的部分,也算为大三作准备。

C++中set集合的使用

定义一个int类型的集合

set<int> s;

set<int>::iterator it;

基本操作有如下:

s.inert(10);//插入元素10

s.erase(10);//删除元素10

s.clear();//清空集合

s.size();//集合元素的个数

s.empty();//判断集合是否为空

it=s.find(10);//查找集合中是否有元素10,有的话返回10,没有返回s.end();

首先集合在数学的概念中就是互异性,不能有重复

需要注意的点:

1.是以中序遍历去遍历整个集合的,在插入的时候自动调整

2.遍历的时候需要判断一下集合是否为空;

3.插入的数默认从小到大排序 set<int>::iterator it; 

4.如果要从大到小的话 set<int>::reverse_iterator rit;

         for(rit=s.rbegin();rit!=s.rend();rit++)

         {

                  cout<<*rit<<" ";

         }

 

 

自定义比较函数,用到结构体

 1 #include<set>
 2 
 3 #include<string>
 4 
 5 #include<iostream>
 6 
 7 using namespace std;
 8 
 9  
10 
11 struct Info
12 
13 {
14 
15          string name;
16 
17          float score;
18 
19          //重载 '<'操作符
20 
21          bool operator < (const Info &a)const
22 
23          {
24 
25                   //按照score从小到大排序 换为‘<’则为从大到小
26 
27                   return a.score>score;
28 
29          }
30 
31 };
32 
33 int main()
34 
35 {
36 
37          set<Info> s;
38 
39          Info info;
40 
41         
42 
43          info.name="Jack";
44 
45          info.score=99;
46 
47          s.insert(info);
48 
49         
50 
51          info.name="Tom";
52 
53          info.score=56;
54 
55          s.insert(info);
56 
57         
58 
59          info.name="Nacy";
60 
61          info.score=85;
62 
63          s.insert(info);
64 
65         
66 
67          info.name="Elano";
68 
69          info.score=100;
70 
71          s.insert(info);
72 
73         
74 
75          set<Info>::iterator it;
76 
77          for(it=s.begin();it!=s.end();it++)
78 
79          cout<<(*it).name<<" : "<<(*it).score<<endl;
80 
81          return 0;
82 
83  
84 
85 }

结果:

 

 

mutiset:多重集合 和set最大的区别就是,它可以插入重复的元素,

如果删除的话,相同的也一起删除了;

如果查找的话,返回该元素的迭代器的位置,若有相同,返回第一个元素的地址;

其他使用和set基本类似。

#include<set>
#include<string>
#include<iostream>
using namespace std;
int main()
{
    //多重集合对象 
    multiset<string> ms;
    ms.insert("abc");
    ms.insert("123");
    ms.insert("111") ;
    ms.insert("aaa");
    ms.insert("123"); 
    ms.insert("bbb");
    
    multiset<string>::iterator it;
    for(it=ms.begin();it!=ms.end();it++)
    {
        cout<<*it<<endl;
    }
    cout<<endl<<"集合的大小:"<<ms.size()<<endl;
    
    it=ms.find("123");
    if(it!=ms.end())
    {
        cout<<*it<<endl;
    }
    else cout<<"not found"<<endl;
    
    it=ms.find("43");
    if(it!=ms.end())
    {
        cout<<*it<<endl;
    }
    else cout<<"not found"<<endl;
    
    int n=ms.erase("123");
    cout<<"共删除:"<<n<<endl<<endl;
    for(it=ms.begin();it!=ms.end();it++)
    {
        cout<<*it<<endl;
    }
    return 0;    
}