STL学习之set容器
2012-06-24 16:35
399 查看
set容器只是单纯的键的集合。
除了两种例外情况外,set容器支持大部分的map操作。
两种例外包括:set容器不支持下标操作符,而且没有定义mapped_type类型。在set容器中,value_type类型不是pair类型,而是与key_type相同的类型。与map一样,set容器存储的键也必须唯一,而且不能修改。
构造函数:
与map容器一样,set容器的每一个键值都只能对应一个元素。以一段范围的元素初始化set对象或者在set对象中插入一组元素时,对于每一个键,事实上都只添加了一个元素:
执行结果:
18
9
由上例可以知道,set容器中保存了vector容器中不相同的9个元素。
在set容器中添加元素
set<string> set1; //第一中定义
set1.insert("this");
set1.insert("hello");
//第二种定义
set<string>::iterator positon;
postion = set1.begin();
set1.insert(position, "insert");
//第三种定义
set<int> iset2;
iset2.insert(ivect.begin(),ivect.end());
与map容器的操作一样,带有一个键值参数的insert返回pair类型对象,包含一个迭代器和一个bool值,迭代器指向拥有该键的元素,而bool值表明是否添加了元素。
从set容器中获取元素
set容器中不提供下标操作符。为了通过键从set中获取元素,可使用find。如果只是简单的判定某个元素是否存在,可以使用count。
正如不能修改map中的键值一样,set容器中的键值也是const。在获取set容器中的某个元素迭代器后,只能对其做读操作,而不能做写操作:
set<int>::iterator set = iset.find(1);
*set = 11;//错误
cout << *set << endl; //正确
除了两种例外情况外,set容器支持大部分的map操作。
两种例外包括:set容器不支持下标操作符,而且没有定义mapped_type类型。在set容器中,value_type类型不是pair类型,而是与key_type相同的类型。与map一样,set容器存储的键也必须唯一,而且不能修改。
构造函数:
explicit set ( const Compare& comp = Compare(), const Allocator& = Allocator() ); template <class InputIterator> set ( InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator() ); set ( const set<Key,Compare,Allocator>& x );
与map容器一样,set容器的每一个键值都只能对应一个元素。以一段范围的元素初始化set对象或者在set对象中插入一组元素时,对于每一个键,事实上都只添加了一个元素:
#include <iostream> #include <vector> #include <set> using namespace std; int main(void) { vector<int> ivect; for (vector<int>::size_type i=0; i<9; i++) { ivect.push_back(i); ivect.push_back(i); } set<int> iset(ivect.begin(), ivect.end()); cout << ivect.size() << endl; cout << iset.size() << endl; return 0; }
执行结果:
18
9
由上例可以知道,set容器中保存了vector容器中不相同的9个元素。
在set容器中添加元素
pair<iterator,bool> insert ( const value_type& x ); iterator insert ( iterator position, const value_type& x ); template <class InputIterator> void insert ( InputIterator first, InputIterator last );和map中此函数定义类似。
set<string> set1; //第一中定义
set1.insert("this");
set1.insert("hello");
//第二种定义
set<string>::iterator positon;
postion = set1.begin();
set1.insert(position, "insert");
//第三种定义
set<int> iset2;
iset2.insert(ivect.begin(),ivect.end());
与map容器的操作一样,带有一个键值参数的insert返回pair类型对象,包含一个迭代器和一个bool值,迭代器指向拥有该键的元素,而bool值表明是否添加了元素。
从set容器中获取元素
set容器中不提供下标操作符。为了通过键从set中获取元素,可使用find。如果只是简单的判定某个元素是否存在,可以使用count。
正如不能修改map中的键值一样,set容器中的键值也是const。在获取set容器中的某个元素迭代器后,只能对其做读操作,而不能做写操作:
set<int>::iterator set = iset.find(1);
*set = 11;//错误
cout << *set << endl; //正确
相关文章推荐
- C++ STL学习之八:关联式容器set深入学习
- STL学习——STL中的关联式容器总结(RB-tree、set、map、hashtable、hash_set、hash_map)
- C++ STL容器的学习使用(vector、queue、list、set、map)
- C++学习STL之关联容器 --- pair、map、set
- STL学习之set容器
- C++ STL关联容器 set和map学习笔记
- 标准模板库(STL)学习探究之Set容器
- 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)
- STL学习笔记-set/multiset容器(集合)
- STL学习笔记----5.容器 set 和 multiset
- 今日学习札记——STL常用容器:vector、list、set和multiset、map和multimap(11.17)
- STL学习笔记----5.容器 set 和 multiset
- STL模板学习之set容器(C/C++)
- STL学习笔记之容器--set
- java学习个人笔记---容器之Map与Set关系
- 【C++ STL学习之三】容器deque深入学习
- STL容器使用DEMO-set
- 【stl学习笔记】set、multiset
- 标准模板库(STL)学习指南之List容器
- C++ Primer学习笔记:STL顺序容器