C++set 和 multiset的使用


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

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; } 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM