stl学习(二)集合 set 的使用
2016-10-13 18:16
447 查看
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)(返回第一个大于或等于键值的迭代器 和 第一个大于键值的迭代器)
》》》
1.灵活使用关键字排序
※若集合元素不是结构体是单纯的变量类型,用结构体重载()运算符
2.灵活使用遍历
※顺序遍历,使用iterator直接遍历即可
set的遍历是高效的中序遍历,也就是说iterator的++和--就可以直接得到其前驱和后继
相对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?
》》》
1.灵活使用关键字排序
※若集合元素不是结构体是单纯的变量类型,用结构体重载()运算符
#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; }※若集合元素为结构体,直接在元素结构体内重载 < 运算符即可
2.灵活使用遍历
※顺序遍历,使用iterator直接遍历即可
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优先级队列(priority_queue)和集合(set)的使用
- JAVA学习--集合Set使用
- C++ STL 有关于SET集合部分 的自定义数据类型的排序 以及 pair的使用
- 标准模板库(STL)学习指南之set集合
- STL---set基本使用--取集合的交、并、差、对称差
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
- C++的STL中集合(set)的使用说明
- C++ STL容器的学习使用(vector、queue、list、set、map)
- C++的STL中集合(set)的使用说明
- OC学习之道:OC对象,字典,集合的使用方法NSDictionary,NSMutableDictionary, NSSet,NSMutableSet,NSCountedSet
- C++ STL入门教程(6)——set(集合)的使用(附完整程序代码)
- JAVA学习--集合Set使用
- STL学习笔记-set/multiset容器(集合)
- C++的STL中集合(set)的使用说明
- STL模板库的学习之集合(set)
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
- iOS开发学习专题-基础知识(二)NSArray数组NSMutableArray可变数组NSSet集合NSMutableSet可变集合详细使用方式
- 快速学习stl中集合set
- C++学习 STL之set使用方法小结