描述

以前编程都是用万能的数组和结构体来实现,但是很多时候就很有数组大小限制和运行效率的困扰,很多时候用map,set,vector,queue,stack效率会高很多。我记性又很差,所以写这篇简单的笔记,仅供参考。本章介绍Set的基本用法。

Set

Set是集合的意思,所以元素唯一,set是有序的,默认是升序。

常用

begin() 返回set容器的第一个元素
end() 返回set容器的最后一个元素的后一位,一般放着set的大小
clear() 删除set容器中的所有的元素
empty() 判断set容器是否为空
max_size() 返回set容器可能包含的元素最大个数
size() 返回当前set容器中的元素个数

插入 查找 计数

insert(key_value)

将key_value插入到set中 ,返回值是pair::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。

inset(first,second)

将定位器first到second之间的元素插入到set中,返回值是void.

count(key_value)

用来查找set中某个某个键值出现的次数。一个键值在set只可能出现0或1次,

find()

若元素存在,就返回改元素的地址,用迭代器接收。不存在返回end();

Lower_Upper_Bound 和 equal_range

lower_bound(key_value) ,返回第一个大于等于key_value的定位器
upper_bound(key_value),返回最后一个大于key_value的定位器
equal_range() ,返回一对定位器,分别表示第一个大于或等于给定关键值的元素和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
s.insert(1);
s.insert(5);
s.insert(3);
s.insert(2);
s.insert(4);
s.insert(1);
cout<<"set 的 size 值为 :"<<s.size()<<endl;
cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl;
cout<<"set 中的最后一个元素是:"<<*s.end()<<endl;
cout<<"set 中 1 出现的次数是 :"<<s.count(1)<<endl;
cout<<"set 中 2 出现的次数是 :"<<s.count(2)<<endl;
pair<set<int>::const_iterator,set<int>::const_iterator> pr;
pr = s.equal_range(3);
cout<<"第一个大于等于 3 的数是 :"<<*pr.first<<endl;
cout<<"第一个大于 3的数是 : "<<*pr.second<<endl;
set<int>::iterator iter;
//遍历全元素
for(iter=s.begin();iter!=s.end();iter++)
{
cout<<*iter<<endl;
}
//查找
if((iter=s.find(2))!=s.end())
{
cout<<"找到元素"<<*iter<<endl;
}
if((iter=s.find(5))!=s.end())
{
cout<<"找到元素"<<*iter<<endl;
}
cout<<"返回第一个大于等于3的定位器 "<<*s.lower_bound(3)<<endl;
cout<<"返回第一个大于3的定位器 "<<*s.upper_bound(3)<<endl;
//插入
pair<set<int>::iterator,bool> p;
p = s.insert(5);
if(p.second)
{
cout<<"5 插入的位置 "<<*p.first<<endl;
}
p = s.insert(0);
if(p.second)
{
cout<<"0 插入的位置 "<<*p.first<<endl;
}
s.clear();
if(s.empty())
{
cout<<"set 为空 !!!"<<endl;
}
cout<<"set 的 size 值为 :"<<s.size()<<endl;
cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
return 0;
}

图示

set使用图示