STL学习之set容器

 set容器只是单纯的键的集合。

       除了两种例外情况外,set容器支持大部分的map操作。

       两种例外包括:set容器不支持下标操作符,而且没有定义mapped_type类型。在set容器中,value_type类型不是pair类型,而是与key_type相同的类型。与map一样,set容器存储的键也必须唯一,而且不能修改。

       构造函数:

[cpp]  view plain copy
  1. explicit set ( const Compare& comp = Compare(),  
  2.                const Allocator& = Allocator() );  
  3. template <class InputIterator>  
  4.   set ( InputIterator first, InputIterator last,  
  5.         const Compare& comp = Compare(), const Allocator& = Allocator() );  
  6. set ( const set<Key,Compare,Allocator>& x );  

      与map容器一样,set容器的每一个键值都只能对应一个元素。以一段范围的元素初始化set对象或者在set对象中插入一组元素时,对于每一个键,事实上都只添加了一个元素:     

[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <vector>  
  3. #include <set>  
  4.   
  5. using namespace std;  
  6.   
  7. int main(void)  
  8. {  
  9.     vector<int> ivect;  
  10.     for (vector<int>::size_type i=0; i<9; i++)  
  11.     {  
  12.         ivect.push_back(i);  
  13.         ivect.push_back(i);  
  14.     }  
  15.       
  16.     set<int> iset(ivect.begin(), ivect.end());  
  17.     cout << ivect.size() << endl;  
  18.     cout << iset.size() << endl;  
  19.     return 0;  
  20. }  

执行结果:

18

9

由上例可以知道,set容器中保存了vector容器中不相同的9个元素。

在set容器中添加元素

[cpp]  view plain copy
  1. pair<iterator,bool> insert ( const value_type& x );  
  2.            iterator insert ( iterator position, const value_type& x );  
  3. template <class InputIterator>  
  4.       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; //正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值