标准模板库STL中提供的set容器。
set是一个容器,它可以存储数据,读取数据,但每个值必须唯一,可以使用multiset储存重复的数据。系统根据值,对数据自动排序,每个值不能被直接改变。
#include
#using namespace std;
模版原型
template
class Compare=lcss
class Allocator=allocator
set中的比较函数是默认的简单的比较,当使用特定的数据结构时,要重构比较函数:
class oper
{
public:
bool operator()(string s1,string s2){
// return true;
return s1.length() b(thisoper);
b.insert("awff");
b.insert("aaa");
b.insert("ff");
return 0;
}
这时对于一个string 的set,将以字符串长短进行排序。
但是,这种在类中的比较只能用operator()以函数模式进行比较,但是只有这一个函数,只能进行排序,不能进行查找函数,应该还有去重构==操作符。若要重构<,==,>这些操作符,就必须,就必须在一个类中或struct里,以其本身为符号左边,对符号右边的对象进行大小判断。然后,我就要重新定义一个类或者struct作为key,然后使用这个重构的判断才能进行判断。
对于string类型,stl中可以直接进行默认的string判断操作,但是,要
#include
set中比较重要的函数:
begin(),
返回指向首元素的定位器iterator.,定位器为双向的,指向Key和set,一般为iterator时,可以改变key值,若为const_iterator时,无法改变值.
对于set 的定位器,其地址指向的就是key的存放地址,所以*set就为key的值
oper thisoper;
set b(thisoper);
b.insert("awff");
b.insert("aaa");
b.insert("ff");
set::iterator p;
p=b.begin();
count( Key):返回对应Key的元素个数,一般时0或1,当对于multiset可能为其他值,返回int
oper thisoper;
multiset b(thisoper);
b.insert("awff");
b.insert("ff");
b.insert("ff");
b.insert("ff");
int n=b.count("ff");
end():返回最后一个元素的定位器,iterator
这里的末尾定位器不储存数据,所以,当删除到遍历迭代器为end时,即对set完成了删除。
equal_range():返回一对定位器,一个指向>= 给定值的第一个Key,>给定值的第一个key。
oper thisoper;
multiset b(thisoper);
b.insert("awff");
b.insert("ff");
b.insert("ff");
b.insert("ff");
pair ::const_iterator,set::const_iterator> p;
p=b.equal_range("ff");
结果一个指向awff,一个指向ff。
erase();将一定范围内的元素删除
find(template Key):找出与给定key相同的定位器,若不存在,指向set的结束定位器。
oper thisoper;
multiset b(thisoper);
b.insert("awff");
b.insert("ff");
b.insert("ff");
b.insert("fff");
set::const_iterator p;
p=b.find("ggg");
判断的方法是由重定义比较函数规定的,所以,这里p指向的key为“fff”而不是"awff"。
get_allocator():返回set容器的一个allocator的副本
insert() 插入一个元素或一定数量的元素到应该的位置
oper thisoper;
set b(thisoper);
b.insert("awff");
b.insert("ff");
b.insert("gf");
b.insert("g");
b.insert(b.begin(),"fff");
指定到位置后,set还会自己进行调整,导致位置恢复正常,所以,感觉没有多大意义去指定位置。对了,当是multiset时,可以对相同的key进行排序。还是有意义的。
ower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
key_comp() 返回一个用于元素间值比较的函数
max_size() 返回集合能容纳的元素的最大限值
rbegin() 返回指向集合中最后一个元素的反向迭代器
rend() 返回指向集合中第一个元素的反向迭代器
size() 集合中元素的数目
swap() 交换两个集合变量
upper_bound() 返回大于某个值元素的迭代器
value_comp() 返回一个用于比较元素间的值的函数