首页 > 代码库 > set--STL
set--STL
STL-set
简介
set是一种随机存储的关联式容器,其关键词(key)和元素(value)是同一个值。set之中所有元素互不相同。set是通过二叉查找树来实现的。
创建
创建一个空的set
1: set<int> s0 ;
创建一个带大于比较器的set, 默认是小于比较器less<int>
1: set<int, greater<int>> s1 ;
用数组初始化一个set
1: int a[3] = {1, 2, 3} ;
2: set<int> s2(a, a + 3) ;
用拷贝构造函数初始化set
1: set<int> s1 ;
2: set<int> s2(s1) ;
区间初始化
1: set<int> s1 ;
2: set<int> s2(s1.begin(), s1.end()) ;
自定义比较函数
以类为比较器
1: struct classcmp
2: {
3: bool operator()(const int& lhs, const int& rhs)
4: {
5: return lhs < rhs ;
6: }
7: };
8:
9: int main(void)
10: {
11: set<int, classcmp> s5 ;
12:
13: system("pause") ;
14: return 0 ;
15: }
以函数指针为比较器
1: bool fncmp(int lhs, int rhs)
2: {
3: return lhs < rhs ;
4: }
5:
6: int main(void)
7: {
8: bool(*fn_pt)(int, int) = fncmp ;
9: set<int, bool(*)(int, int)> s1(fn_pt) ;
10:
11: system("pause") ;
12: return 0 ;
13: }
遍历
正向遍历
使用while
1: int a[3] = {1, 2, 3} ;
2: set<int> s(a, a + 3) ;
3:
4: set<int>::const_iterator itor ;
5: itor = s.begin() ;
6:
7: while (itor != s.end())
8: {
9: cout << *itor << endl ;
10: ++itor ;
11: }
使用for
1: int a[3] = {1, 2, 3} ;
2: set<int> s(a, a + 3) ;
3:
4: set<int>::const_iterator itor ;
5: for (itor = s.begin(); itor != s.end(); ++itor)
6: {
7: cout << *itor << endl ;
8: }
反向遍历
使用while
1: int a[3] = {1, 2, 3} ;
2: set<int> s(a, a + 3) ;
3:
4: set<int>::const_reverse_iterator ritor ;
5: ritor = s.rbegin() ;
6:
7: while (ritor != s.rend())
8: {
9: cout << *ritor << endl ;
10: ++ritor ;
11: }
使用for
1: int a[3] = {1, 2, 3} ;
2: set<int> s(a, a + 3) ;
3:
4: set<int>::const_reverse_iterator ritor ;
5: for (ritor = s.rbegin(); ritor != s.rend(); ++ritor)
6: {
7: cout << *ritor << endl ;
8: }
插入
插入单个值
1: set<int> s ;
2: s.insert(1) ;
批量插入
插入整个数组
1: int a[3] = {1, 2, 3} ;
2: set<int> s ;
3: s.insert(a, a + 3) ;
插入其他set的值
1: int a[3] = {1, 2, 3} ;
2: set<int> s(a, a + 3) ;
3:
4: set<int> s1 ;
5: s1.insert(s.begin(), s.end()) ;
删除
1: set<int> s ;
2: for (int i = 1; i <= 5; ++i)
3: s.insert(i) ;
4:
5: set<int>::const_iterator citor ;
6: citor = s.begin() ;
7: ++citor ; // citor now point to 2
8:
9: // 删除单个元素
10: s.erase(citor) ; // erase 2 ;
11:
12: //批量删除
13: citor = s.find(3) ; // itor now point to 3
14: s.erase(citor, s.end()) ; // erase 3, 4, 5
15:
16: //删除所有元素
17: s.erase(s.begin(), s.end()) ;// erase all elements, same as s.clear()
查找
find
1: set<int> s ;
2: for (int i = 1; i <= 5; ++i)
3: s.insert(i) ;
4:
5: set<int>::iterator itor ;
6: itor = s.find(4) ;
7: if(itor != s.end()) // itor point to s.end() if not found
8: cout << "found" ;
9: else
10: cout << "not found" ;
count
1: set<int> s ;
2: for (int i = 1; i <= 5; ++i)
3: s.insert(i) ;
4:
5: set<int>::iterator itor ;
6: if(s.count(4) == 1) // return 1 if s contains 4, else 0
7: cout << "s contains 4" ;
8: else
9: cout << "s does not contains 4" ;
排序
由于set本身是有序的,所以不提供排序函数。
#include<iostream> #include<cstdio> #include<set> using namespace std; int main() { set<char* >s2; s2.insert("char *"); cout<<*s2.begin()<<endl<<endl; puts("///-- set<int,greater<int> > --///"); ///-- set<int,greater<int> > --/// int a[9]={1,2,3,4,5,6,7,8,9}; set<int,greater<int> >s(a,a+9); /// 初始化 for(set<int,greater<int> >::iterator p=s.begin();p!=s.end();p++) cout<<*p<<" "; cout<<endl; puts("\n///-- set<int> --///"); ///-- set<int> --/// set<int>s1(s.begin(),s.end()); /// 初始化 set<int>::iterator p; s1.insert(1); s1.insert(5); ///s1.clear(); s1.insert(5); cout<<"erase:"<<s1.erase(5)<<endl; /// erase successfully return 1,otherwise return 0 s1.insert(10); s1.insert(10); s1.insert(9); s1.insert(8); s1.insert(7); for(p=s1.begin();p!=s1.end();p++) cout<<*p<<" "; cout<<endl<<"size:"<<s1.size()<<endl; cout<<"count:"<<s1.count(4)<<endl; cout<<"empty:"<<s1.empty()<<endl; cout<<"lower_bound:"<<*s1.lower_bound(8)<<endl; cout<<"upper_bound:"<<*s1.upper_bound(8)<<endl; return 0; } /** begin() 返回指向第一个元素的迭代器 clear() 清除所有元素 count() 返回某个值元素的个数 empty() 如果集合为空,返回true end() 返回指向最后一个元素的迭代器 equal_range() 返回集合中与给定值相等的上下限的两个迭代器 erase() 删除集合中的元素 find() 返回一个指向被查找到元素的迭代器 get_allocator() 返回集合的分配器 insert() 在集合中插入元素 lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器 key_comp() 返回一个用于元素间值比较的函数 max_size() 返回集合能容纳的元素的最大限值 rbegin() 返回指向集合中最后一个元素的反向迭代器 rend() 返回指向集合中第一个元素的反向迭代器 size() 集合中元素的数目 swap() 交换两个集合变量 upper_bound() 返回大于某个值元素的迭代器 value_comp() 返回一个用于比较元素间的值的函数 */
运行结果
set--STL
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。