最后一个自由支配的暑假,学一些自己感兴趣的部分,也算为大三作准备。
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;
}