由于multiset和set相差不大,所以基本以set做练习;

集合(Set)是一种包含已排序(升序)对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。集合元素既充当数据,又充当关键码,以升序的顺序存储;multiset中的元素可以重复。

1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素

2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数

3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

模板原型

//Key为元素(键值)类型

template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) > class set

key:元素的数据类型;

Comapre:实现内部排序的仿函数;

allocator:内存配置器,负责内存的分配和销毁;

构造函数:

1、set<int> s1;

2、set<int> s2(less<int>());   //以构造函数参数定义

3、set<int> ::allocator_type s1_Alloc;

s1_Alloc=s1.get_alloctor();

set<int> s3(less<int>(),s1_Alloc);

4、set<int,greater<int>> s4; //在模板中以参数形式实现;'> >'之间有空格;

成员函数:

insert()--在集合中插入元素 //返回pair(iterator,bool)      iterator:迭代器指针,插入的位置;bool:是否插入成功

-----------------------------------------------------------------------------------------------------


begin()--返回指向第一个元素的迭代器


end()--返回指向最后一个元素的迭代器

rbegin()--返回指向集合中最后一个元素的反向迭代器

rend()--返回指向集合中第一个元素的反向迭代器

-----------------------------------------------------------------------------------------------------


empty()--如果集合为空,返回true


size()--集合中元素的数目

max_size()--返回集合能容纳的元素的最大限值

-----------------------------------------------------------------------------------------------------

erase()--删除集合中的元素

clear()--清除所有元素

-----------------------------------------------------------------------------------------------------

find()--返回一个指向被查找到元素的迭代器


count()--返回某个值元素的个数

get_allocator()--返回集合的分配器

swap()--交换两个集合变量  //a.swap(b);

equal_range()--返回集合中与给定值相等的上下限的两个迭代器


lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器


upper_bound()--返回大于某个值元素的迭代器

---------------------------------------------------------------

key_comp()--返回一个用于元素键值比较的函数  //返回kep_compare类型

value_comp()--返回一个用于比较元素实值的函数

eg:

set<int,less<int> >::key_compare kcl =  s1.key_comp();

-----------------------------------------------------------------------------------------------------