博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
set
阅读量:6886 次
发布时间:2019-06-27

本文共 3103 字,大约阅读时间需要 10 分钟。

转自:

简介

set是一种随机存储的关联式容器,其关键词(key)和元素(value)是同一个值。set之中所有元素互不相同。set是通过二叉查找树来实现的。

创建

创建一个空的set

1: set
s0 ;

创建一个带大于比较器的set, 默认是小于比较器less<int>

1: set
> s1 ;

用数组初始化一个set

1: int a[3] = {1, 2, 3} ;
2: set
s2(a, a + 3) ;

用拷贝构造函数初始化set

1: set
s1 ;
2: set
s2(s1) ;

区间初始化

1: set
s1 ;
2: set
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
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
s1(fn_pt) ;
10:
11:   system("pause") ;
12:   return 0 ;
13: }

 

遍历

正向遍历

使用while

1: int a[3] = {1, 2, 3} ;
2: set
s(a, a + 3) ;
3:
4: set
::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
s(a, a + 3) ;
3:
4: set
::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
s(a, a + 3) ;
3:
4: set
::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
s(a, a + 3) ;
3:
4: set
::const_reverse_iterator ritor ;
5: for (ritor = s.rbegin(); ritor != s.rend(); ++ritor)
6: {
7:   cout << *ritor << endl ;
8: }

插入

插入单个值

1: set
s ;
2: s.insert(1) ;

成片插入

插入整个数组

1: int a[3] = {1, 2, 3} ;
2: set
s ;
3: s.insert(a, a + 3) ;

插入其他set的值

1: int a[3] = {1, 2, 3} ;
2: set
s(a, a + 3) ;
3:
4: set
s1 ;
5: s1.insert(s.begin(), s.end()) ;

删除

1: set
s ;
2: for (int i = 1; i <= 5; ++i)
3:   s.insert(i) ;
4:
5: set
::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
s ;
2: for (int i = 1; i <= 5; ++i)
3:   s.insert(i) ;
4:
5: set
::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
s ;
2: for (int i = 1; i <= 5; ++i)
3:   s.insert(i) ;
4:
5: set
::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本身是有序的,所以不提供排序函数。

转载地址:http://extbl.baihongyu.com/

你可能感兴趣的文章
关于redis,学会这8点就够了
查看>>
阿里小二的日常工作要被TA们“接管”了!
查看>>
权限框架Shiro学习之表结构设计
查看>>
Nginx 服务器之速率限制
查看>>
JavaScript实现多态和继承的封装操作示例
查看>>
大数据平台开发公司有哪些?
查看>>
用vs运行cmake后的工程
查看>>
1.1 函数定义 1.2 函数的参数 1.3 函数的默认参数
查看>>
不学无数——Java动态代理
查看>>
如何使用手机、家庭宽带作为爬虫的代理服务器
查看>>
Python黑客攻击的几种技术,你得了解一下
查看>>
你真的懂了redis的数据结构吗?redis内部数据结构和外部数据结构揭秘
查看>>
Ubuntu10.04LTS配置Hadoop1.0.1+HBase 0.92.0
查看>>
ST教学分析:相同行为连续数
查看>>
status2 转义输出
查看>>
[清华集训2016]如何优雅地求和——NTT
查看>>
JavaScript 原型链例子讲解
查看>>
书摘---创业36条军规7:业务的五个问题
查看>>
Linux学习-第三节课
查看>>
activemq搭建和使用
查看>>