set容器
set介绍
set是关联容器的一种,是已排好序的集合(其中的元素按照升序排序)。set和multiset类似。但是,set内不能有可重复的元素,但是multiset去可以有重复的元素。同时,set容器中的元素如果被修改后,容器并不会自动调整顺序,如果修改set内的元素,会破坏容器的有序性。我们为了修改某个值,可以先删除掉其中的那个元素,然后再插入我们一个想要更改称为的元素。
set头文件
#define<set>
set定义
set<int> s;
遍历set
s.begin(); 返回set容器的第一个元素
s.end(); 返回set容器的最后一个元素
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(38);
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it ++){
cout << *it << endl;//必须要有 “ * ”
}
/*
1
5
38
*/
set元素反向输出
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
set<int>::reverse_iterator rit;
for (rit = s.rbegin(); rit != s.rend(); rit ++){
cout << *rit << endl;//必须要有 “ * ”
}
/*
38
5
3
1
*/
set函数
set<Type> A;
1)insert()插入一个元素
2)erase()删除元素
1‘ 删除一个元素
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
s.erase(5);
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it ++){
cout << *it << endl;//必须要有 “ * ”
}
/*
1
3
38
*/
2’ 删除一个元素
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
set<int>::iterator it = s.begin();
s.erase(++it);//it只支持++ -- 操作,不支持it + 3
for (it = s.begin(); it != s.end(); it ++){
cout << *it << endl;//必须要有 “ * ”
}
/*
1
5
38
*/
3’删除区间
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
set<int>::iterator it = s.begin();
set<int>::iterator itt = s.end();
s.erase(it, itt);//it只支持++ -- 操作,不支持it + 3
for (it = s.begin(); it != s.end(); it ++){
cout << *it << endl;//必须要有 “ * ”
}
/*
*/
3)clear()清空set
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
s.clear();
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it ++){
cout << *it << endl;//必须要有 “ * ”
}
/*
*/
4)empty()判断set是否为空
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
if (s.empty()) puts("yes");
else puts("no");
//no
5)size() 返回元素个数
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
cout << s.size() << endl;//4
6)find(K) 返回一个迭代器,指向键值K
查找一个键值,则返回该键值迭代器的位置,否则,返回最后一个元素后面的一个位置,也就是end()
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
set<int>::iterator it;
if (s.find(5) != s.end()) puts("yes");
else puts("no");
//yes
it = s.find(3);
if (it != s.end()) cout << *it << endl;
else puts("no");
//3
7)count() 判断是否存在一个元素
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
cout << s.count(1) << endl;//找到1,返回1
cout << s.count(2) << endl;//未找到2,返回0
cout << s.count(3) << endl;//未找到3,返回1
8)不常用的函数
1‘第一个不小于k【大于或等于k】的元素lower_bound(k)
返回一个迭代器,指向键值不小于k的第一个元素
2’第一个大于k的元素upper_bound(k)
返回一个迭代器,指向键值大于k的第一个元素
3‘ equal_range().first
set<int> s;
s.insert(1);
s.insert(38);
s.insert(5);
s.insert(3);
cout << "返回第一个不小于3的元素" << *s.lower_bound(3) << endl;//返回第一个不小于3的元素3
cout << "返回第一个大于3的元素" << *s.upper_bound(3) << endl;//返回第一个大于3的元素5
cout << "第一个大于或等于3的元素" << *s.equal_range(3).first << endl;//第一个大于或等于3的元素3
cout << "第一个大于3的元素" << *s.equal_range(3).second << endl;//第一个大于3的元素5