一、基本概念
在set容器中所有元索都会在插入时自动被排序,底层结构是用二叉树实现的。
set和multiset区别:
set不允许容器中有重复的元素
multiset允许容器中有重复的元素
二、构造函数和赋值操作
构造:
set st; 默认构造函数。
set(const set &st); 拷贝构造函数。
赋值:
set& operator=(const set &st);重载等号操作符。
三、大小操作和交换操作
size();返回容器中元素的数目
empty():判断容器是否为空
swap(st);交换两个集合容器
四、插入和删除
插入数据:
insert (elem)在容器中插入元素。
clear();清除所有元素
erase(pos);删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg,end);删除区间[beg,end)的所有元素,返回下一个元素的迭代器。
erase(elem);删除容器中值为elem的元素。
插入数据时只有insert的方式,没有push等操作方式。
五、查找和统计
find(key);查找key是否存在,若存在,返回该键的元素的迭代器(位置);若不存在,返回set.end();
count(key);统计key的元素个数,对于set而言,count返回的不是0就是1,因为其不能存放重复的数值。
查找样例如下:
set<int> s;
s.insert(20);
s.insert(10);
s.insert(30);
s.insert(40);
set<int>::iterator pos = s.find(10);
cout << *pos << endl;
六、set与mulitset的区别
1、set不可以插入重复数据,而multiset可以
2、set插入数据的同时会返回插入结果,表示插入是否成功,multiset不会检测数据。因此可以插入重复数据。
七、pair对组创建
可以利用对组返回两个数据,其具体实现如下:
pair<type, type>Tp ( value1,value2 );
pair<type, type> p = make_pair( value1, value2 );
样例如下:
pair<string, int> p("wer", 20);
cout << "姓名为: " << p.first << "年龄为: " << p.second << endl;
pair<string, int> p2 = make_pair("1w", 30);
cout << "姓名为: " << p2.first << "年龄为: " << p2.second << endl;
八、set容器的排序
set容器默认排序规则为从小到大,利用仿函数,可以改变排序规则。
自定义的数据类型都需要提前指定排序规则。
样例如下:
class MyCompare
{
public:
bool operator()(int s1, int s2)
{
return s1 > s2;
}
};
void test08()
{
set<int, MyCompare> s;
s.insert(209);
s.insert(203);
s.insert(239);
s.insert(239);
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}