由于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:是否插入成功
-----------------------------------------------------------------------------------------------------
end()--返回指向最后一个元素的迭代器
rbegin()--返回指向集合中最后一个元素的反向迭代器
rend()--返回指向集合中第一个元素的反向迭代器
-----------------------------------------------------------------------------------------------------
empty()--如果集合为空,返回true
size()--集合中元素的数目
-----------------------------------------------------------------------------------------------------
erase()--删除集合中的元素
clear()--清除所有元素
-----------------------------------------------------------------------------------------------------
find()--返回一个指向被查找到元素的迭代器
count()--返回某个值元素的个数
equal_range()--返回集合中与给定值相等的上下限的两个迭代器
lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound()--返回大于某个值元素的迭代器
---------------------------------------------------------------
key_comp()--返回一个用于元素键值比较的函数 //返回kep_compare类型
value_comp()--返回一个用于比较元素实值的函数
eg:
set<int,less<int> >::key_compare kcl = s1.key_comp();
-----------------------------------------------------------------------------------------------------