C++ 中的set 容器

1 set 容器
set 容器简介:
 
    set 是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的每个元素的值
必须惟一,而且系统会根据该值来自动将数据排序。每个元素的值不能直接被改变。
 
关键字:begin、clear、count 、empty、end、find、insert
 
需加载的头文件:     #include<set>
模板原型:
template  <  class Key,  class Compare =less <Key >class Allocator =allocator <Key >  >
说明:
参数      含义
Key  存储在set 容器中的关键字的数据类型
Compare 它能提供比较两个元素的函数来决定它们在set 容器中的相对位置。它是可选的,它的默认值是less<key>
allocator 它代表存储管理设备。它是可选的, 它的默认值为allocator<Key>
 
set 容器有以下的特点:
(1)它是一个相关联的容器,它的大小可以改变,它能根据关键字值来提高读取数据的能力。
(2)它提供一个双向的定位器来读写取数据。
(3)它已经根据关键字和一个比较函数来排好序。
(4)它的每一个元素的关键字是惟一的,因此每一个值至多与一个元素对应。
(5)它是一个简单的容器,因为它的元素的值就是它的关键字。
(6)它是一个模板类,因为它提供一个一般且具有独立性的容器。
 
成员变量:
 
成员变量 功能说明
Allocator_type  对象分配器
const_iterator  提供一个双向的定位器,它能读取set 中的一个常元
const_pointer  它能提供到一个常元的指针
const_reference 
一个常元地址
const_reverse_iterator 
提供一个双向的定位器,使得能够在set 容器中读取任意一个常值元素
difference_type 
它提供set 容器中由定位器所指定的范围内的元素的 个数
Iterator 提供一个双向入口定位器,使得能够在set 中读取或者修改元素
Key_compare 
它是提供两个元素的关键字的次序关系的函数
Key_type 
它描述每一个元素的关键字
Pointer 提供一个指向set 中的某元素的指针
Reference 提供在set 容器中的一个常元的地址
Reverse_iterator 
在反向的set 容器中提供一个双向的入口定位器,使 得能够读取或者修改元素
Size_type set 容器中元素个数
value_compare  指传供一个能比较两个元素相对次序的函数
value_type 存储的数据类型
 
1.1 set::begin
 
1.2 set::clear
1.3 set::count
功能:
返回对应某个关键字的元素的个数。
语法:
size_type count(
const Key& _Key
) const;
说明:
_Key 是要进行匹配的关键字的值。
函数返回值:
返回关键字为_Key 的元素的个数。
 
1.4 set::empty
 
1.5 set::end
 
1.6 set::equal_range
功能:
返回一对定位器,它们分别指向第一个大于或等于给定的关键字的元素和第一个比给定的关键 字大的元素。
语法:
pair  <const_iterator, const_iterator > equal_range  (  const Key & _Key )  const;
pair  <iterator, iterator > equal_range  (  const Key & _Key )  const;
说明:
_Key 是一个用于排序的关键字。
函数返回值:
返回一对定位器。
要从第一个定位器中取得数据,可用pr.first。
从第二个定位器中取得数据,则用pr.second。
 
1.7 set::erase
功能:
将一个或一定范围的元素删除。
语法:
iterator erase ( iterator _Where ) ;
iterator erase (  iterator _First,  iterator _Last ) ;
size_type erase (  const key_type & _Key ) ;
说明:
参数 含义
_Where 表示要删除的元素的位置
_First 第一个被删除的元素的位置
 _Last 第一个不被删除的元素的位置
_Key 从set 容器中删除的元素的关键字的值
 
 注意:它不会抛出任何的exception。
 
函数返回值:
    前两个函数返回一个指向第一个没被删除的元素的双向定位器,如果不存在这样的元素,则返
回set 容器的末尾。
    第三个函数返回被删除的元素的个数。
 
1.8 set::find
功能:
求出与给定的关键字相等的元素的定位器。
语法:
iterator find (  const Key & _Key ) ;
const_iterator find (  const Key & _Key )  const;
说明:
_Key 是要进行搜索的关键字的值。
该函数会返回一个指向关键字为_Key 的元素的定位器。
当返回的第一个元素的地址值为一个常值定位器(_iterator),则set 可通过它不会被修改。
当返回的第一个元素的地址值为一个定位器(iterator),则set 可通过它被修改。
函数返回值:
找到该元素时,返回一个指向关键字为_Key 的元素的定位器,否则返回一个指向set 容器的结
束的定位器。
 
1.9 set::get_allocator
功能:
返回一个构造该set 容器的allocator 的一个副本。
语法:
Allocator get_allocator() const;
说明:
容器 set 的allocator 指明一个类的存储管理。默认的allocator 能提供STL 容器高效的运行。
函数返回值:
返回该容器的allocator。
 
1.10 set::insert
功能:
将一个元素或者一定数量的元素插入到set 的特定位置中。
语法:
pair  <iterator,  bool > insert (  const value_type & _Val ) ;
iterator insert ( iterator _Where,   const value_type & _Val ) ;
template < class InputIterator >
void insert ( InputIterator _First,  InputIterator _Last ) ;
说明:
 
参数 含义
_Where  第一个被插入到set 的元素的位置
_Val  插入的参数的值
_First  第一个被插入的位置
_Last  第一个不被插入的位置
 
 
如果能在_Where 后面迅速地插入,那么只要很短的时间。
第三个成员函数将范围为[ _First,_Last ]中的元素插入。
函数返回值:
第一个函数返回一对值,当插入成功时,bool=true,当要插入的元素的关键字与已有的参数的
值相同,则bool=false,而iterator 指向插入的位置或者已存在的元素的位置。
第二个函数返回指向插入的位置的定位器。
 
1.11 set::key_comp
功能:
取得一个比较对象的副本来对set 容器中的元素进行排序。
语法:
key_compare key_comp() const;
说明:
存储对象定义了一个成员函数:
bool operator(const Key& _Left, const Key& _Right);
当_Left 严格在_Right 的前面时,返回true,否则返回false。
函数返回值:
取得一个对set 容器中的元素进行排序的比较对象。
 
1.12 set::lower_bound
功能:
求出指向第一个关键字的值是大于等于一个给定值的元素的定位器。
语法:
iterator lower_bound (  const Key & _Key ) ;
const_iterator lower_bound (  const Key & _Key )  const;
说明:
_Key 是一个用于排序的关键字。
函数返回值:
返回一个指向第一个关键字的值是大于等于一个给定值的元素的定位器,或者返回指向set 容
器的结束的定位器。
 
1.13 set::max_size
功能:
计算 set 容器的最大长度。
语法:
size_type max_size() const;
说明:
max_size 会返回set 容器的最大长度。
函数返回值:
返回 set 容器可能的最大长度。
 
1.14 set::operator!=
功能:
测试该set 容器的左边与右边是否相同。
语法:
bool  operator != (
     const set  <Key, Type, Traits, Allocator > & _Left,
     const set  <Key, Type, Traits, Allocator > & _Right
) ;
说明:
_Left 和_Right 是待比较的两个set 容器。
两个 set 容器相等,当且仅当它们的元素个数相等,且同一个位置上的值相等。
函数返回值:
当_Left 和_Right 不同时,返回True,否则返回False。
 
1.15 set::operator<
 
1.16 set::operator<=
 
1.17 set::operator==
 
1.18 set::operator>
 
1.19 set::operator>=
 
1.20 set::rbegin
功能:
返回一个指向反向set 容器的第一个元素的定位器。
语法:
const_reverse_iterator rbegin()const;
reverse_iterator rbegin();
说明:
rbegin 与反向set 容器一起使用,它的作用与set 容器中的begin 一样。
当返回值为一个const_reverse_iterator,则set 容器不会被修改。
当返回值为一个reverse _iterator,则set 容器可被修改。
函数返回值:
返回一个指向反向set 容器的第一个元素的反向双向定位器。
 
1.21 set::rend
 
1.22 set::set
功能:
set 的构造函数。
语法:
set () ;
explicit set  (  const Compare & _Comp ) ;
explicit set  (  const Compare & _Comp,  const Allocator & _Al ) ;
set (  const _ set  & _Right ) ;
template < class InputIterator >
set  ( InputIterator _First, InputIterator _Last ) ;
template < class InputIterator >
set  (
    InputIterator _First,
    InputIterator _Last,
     const Compare & _Comp
) ;
template < class InputIterator >
set  (
    InputIterator _First,
    InputIterator _Last,
     const Compare & _Comp,
     const Allocator & _Al
) ;
说明:
 
参数 含义
_Al  一个分配器类
_Comp  一个用于比较的函数,它的默认值为compare
_Right 一个set 的拷贝
_First   被拷贝的第一个元素的位置
_Last 不被拷贝的第一个元素的位置
 
所有的构造函数都存储一个分配器和初始化set 容器。
所有的构造函数都存储一个Traits 类型的函数对象,它用于对set 容器的元素进行排序。
头三个构造函数创建一个空的初始set 容器。
第四个构造函数创建一个_Right 容器的副本。
后三个构造函数拷贝在范围_First~_Last 内的一个set 容器。
函数返回值:
无。
 
1.23 set::size
 
1.24 set::swap
功能:
交换两个set 容器的元素。
语法:
void swap ( set & _Right ) ;
说明:
_Right 是与目标容器交换元素的set 容器。
函数返回值:
无。
 
1.25 set::upper_bound
功能:
求出指向第一个关键字的值是大于一个给定值的元素的定位器。
语法:
iterator upper_bound (  const Key & _Key ) ;
const_iterator upper_bound (  const Key & _Key )  const;
说明:
_Key 是一个用于排序的关键字。
函数返回值:
返回一个指向第一个关键字的值是大于一个给定值的元素的定位器,或者返回指向set 容器的 结束的定位器。
 
1.26 set::value_comp
功能:
返回一个能确定元素的次序的函数。
语法:
value_compare value_comp ()  const;
说明:
它是根椐关键字的值key 来确定元素的次序关系的。
函数返回值:
返回一个能确定元素的次序的函数。


set容器的内部比较大小,排序,可以是简单数据类型,也可以是结构体 

---1--- 
struct cmp//简单数据类型,数据结构也可以 
{
	bool operator()(const type &a,const type &b)
	{
		return a>b;
	}
};
set<int,cmp>s;

---2--- 
struct node
{
	int x;
	... 
	bool operator <(const node &a) const
	{
		return a.x<x;//big->small 
	}
};
set<node>s;







Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐