stl学习(二)集合 set 的使用
- set集合容器底层由红黑树实现,是平衡二叉搜索树。
- 相对stl中的list、deque效率更高。
- 注意:由于集合 的 性质,单纯的 set 不允许重复的元素
- 初始化 / 清空 函数 : clear()
- 插入 / 添加 函数:insert(x) (插入键值x到集合中)
- 插入 / 添加 函数:insert(iterator,iterator) (插入迭代器之间的元素到集合中)
- 检索 / 查找 函数:find(x) (查找键值为x的元素,若存在,则返回键值的迭代器位置,否则返回集合最后一个元素的下一个位置)
- 删除 函数:erase(x) (删除键值为x的元素)
- 删除 函数:erase(iterator) (删除迭代器位置的元素)
- 删除 函数:erase(iterator,iterator) (删除迭代器之间的值)
- 累计 函数:count(x)(用来查找集合中某个元素是否出现过,只返回1或0)
- 类似二分查找 函数:equal_range(x)(返回第一个大于或等于键值的迭代器 和 第一个大于键值的迭代器)
#include <set>
#include <iterator>
#include <iostream>
#include <algorithm> using namespace std; typedef set<int> S;
S s;
int n; int main()
{
cin>> n;
for( int i = 0 ; i < n ; i++ ){
int x;
cin>> x;
s.insert( x );
}
pair< S::const_iterator,S::const_iterator > pr;
int y;
cin>> y;
pr = s.equal_range( y );
cout<< *pr.first << *pr.second <<endl;
return 0;
}
怎样更加灵活地使用set?
#include <set>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm> using namespace std; struct cmp{
bool operator () ( const int &a,const int &b ){
return a>b;
}
};
typedef set<int,cmp> S;
int n;
S s; int main()
{
cin>> n;
for( int i = 0 ; i < n ; i++ ){
int x;
cin>> x;
s.insert( x );
}
for( S::iterator i = s.begin() ; i != s.end() ; i++ )
cout<< *i <<endl;
return 0;
}
※若集合元素为结构体,直接在元素结构体内重载 < 运算符即可
set<int> s ;
for( set<int>::iterator i = s.begin() ; i != s.end() ; i++ );
※反序遍历,使用reverse_iterator
set<int> s ;
for( set<int>::reverse_iterator i = s.rbegin() ; i != s.rend() ; i++ )
- set的遍历是高效的中序遍历,也就是说iterator的++和--就可以直接得到其前驱和后继
stl学习(二)集合 set 的使用的更多相关文章
- STL学习二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- 侯捷STL学习(二)
第六节:容器之分类和各种测试(四) stack不提供iterator操作,破坏了容器的独特性,先进先出. 使用容器multiset(允许元素重复) 内部是红黑树,insert操作就保证了排好了序. 标 ...
- 侯捷STL学习(二)--序列容器测试
第六节:容器之分类和各种测试(四) stack不提供iterator操作,破坏了容器的独特性,先进先出. 使用容器multiset(允许元素重复) 内部是红黑树,insert操作就保证了排好了序. 标 ...
- ###STL学习--关联容器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...
- ###STL学习--适配器
点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...
- STL学习:STL库vector、string、set、map用法
本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- ###STL学习--vector
点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...
- ###STL学习--迭代器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的迭代器. ###stl学习 |--迭代 ...
- ###STL学习--函数对象
点击查看Evernote原文. #@author: gr #@date: 2014-08-13 #@email: forgerui@gmail.com 在stl中,函数对象被大量地使用,用以提高代码的 ...
随机推荐
- 渗透测试报告收集、生成工具MagicTree
0x00 软件介绍: MagicTree是Gremwell开发的一个Java程序,支持主动收集数据和生成报告的工具.他通过树形结构节点来管理数据,这种分层存储的方法对管理主机和网络数据特别有效. 其分 ...
- 如何在Infraworks中创建多树种组成的森林
在Infraworks 2014中,你可以有shp文件导入生成树木和森林,也可以直接在模型中规划一片区域作为森林.美中不足的就是,这些充其量叫树林不能叫森林,因为他们的样式都是一个树种,而真正的森林肯 ...
- 初学Spring有没有适合的书
初学者之前没有阅读java框架源码的习惯.没有阅读过源码,知道整体流程么?知道依赖注入的概念么?知道aop么?知道其中用到了哪些设计模式么?再说了,如果一上手就是源码?难道你没有注意到Spring的类 ...
- 深入理解Objective-C Runtime
一.简介 主要特点: 在OC语言中,函数的调用是属于动态调用的,编译阶段并不确定要调用的函数,在真正的运行时才会根据函数名查找要调用哪个函数. 而在C语言中,函数的调用是在编译阶段就已经确定要调用哪个 ...
- qq邮箱过滤器 + Foxmail(IMAP)
一.qq邮箱过滤器 二.Foxmail+ IMAP,实现自定义目录下载 IMAP介绍,和POP比较 如何在Foxmail中配置IMAP
- IntelliJ IDEA 使用Git怎样记住密码和忘记密码的方法
IntelliJ IDEA 使用Git怎样记住密码的方法 1.当使用Ctrl+T进行更新时,弹出密码框(此时不要输入任何字符),直接点"Cancel" 2.略等二三秒,会弹出新的密 ...
- 谈谈用ASP.NET开发的大型网站有哪些架构方式(成本)
在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列举了国内外用ASP.NET开发的大型网站有哪些.最后提到了 ...
- 利用yii2 gridview实现批量删除案例
作者:白狼 出处:http://www.manks.top/article/yii2_gridview_deleteall本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- 将dll程序集添加到缓存里
1.点击开始---所有程序---...如下图 并以管理员身份运行. 2.输入命令行 gacutil.exe /i D:\Word\CRS_BPM_Sln\SourceCode\BPM\Referenc ...
- ORA-00030: User session ID does not exist.
同事在Toad里面执行SQL语句时,突然无线网络中断了,让我检查一下具体情况,如下所示(有些信息,用xxx替换,因为是在处理那些历史归档数据,使用的一个特殊用户,所以可以用下面SQL找到对应的会话信息 ...