头文件:
#include <set>
集合和多重集合的唯一区别:多重集合可以包含重复元素,集合不可以包含重复元素。
构造方法
- ctType<type> ct 创建空集合 <
- ctType<type,sort> ct 创建自定义排序方式的空集合
- ctType<type> ct(otherCt) 用另外的集合 创建集合 <
- ctType<type,sort> ct(otherCt) 用另外的集合创建自定义排序方式的集合
- ctType<type> ct(beg,end) 用另外的集合 创建集合 < ,从beg 到end + 1
- ctType<type,sort> ct(beg,end) 用另外的集合创建自定义排序方式的集合,从beg 到end + 1
示例:
set<int> intSet;
set<int,greater<int> > otherIntSet;
multiset<string> stringMultiSet;
multiset<string, greater<string> > otherStringMultiset;
操作:
- ct.insert(elem) 插入元素,返回是否成功
- ct.insert(pos,elem) 从某个位置开始搜索插入,返回插入的位置
- ct.insert(beg,end) 将beg到end-1的所有元素插入到ct中
- ct.erase(elem) 删除元素,返回删除的个数
- ct.erase(pos) 删除指定位置上的元素,不返回任何值
- ct.erase(beg,end) 删除一段位置的值,不返回任何值
- ct.clear() 清空集合
示例代码:
#include <list>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>
#include <string>
using namespace std;
int main() {
set<int> intSet; // 集合 升序
set<int,greater<int> > intSetA;// 集合 降序
set<int,greater<int> >::iterator intSetAIt;// 迭代器
ostream_iterator<int> screen(cout," ");// 输出迭代器
// intSet 添加元素
intSet.insert(16);
intSet.insert(8);
intSet.insert(20);
intSet.insert(3);
cout << "intSet :" << endl;
copy(intSet.begin(),intSet.end(),screen);
cout<< endl;
// intSetA 添加元素
intSetA.insert(36);
intSetA.insert(84);
intSetA.insert(30);
intSetA.insert(39);
intSetA.insert(59);
intSetA.insert(238);
intSetA.insert(156);
intSetA.insert(156); //重复插入
cout << "intSetA :" << endl;
copy(intSetA.begin(),intSetA.end(),screen);
cout << endl;
// 擦除元素
intSetAIt = intSetA.begin();
++intSetAIt;
++intSetAIt;
++intSetAIt;
intSetA.erase(intSetAIt);
cout << "intSetA.erase:" << endl;
copy(intSetA.begin(),intSetA.end(),screen);
cout << endl;
set<int,greater<int> >intSetB(intSetA);
cout << "intSetB :" << endl;
copy(intSetB.begin(),intSetB.end(),screen);
cout << endl;
intSetB.clear();
cout << "intSetB.clear :" << endl;
copy(intSetB.begin(),intSetB.end(),screen);
cout << endl;
// 定义多重集合
multiset<string, greater<string> > namesMultiSet;
multiset<string, greater<string> >::iterator iter;
ostream_iterator<string> pScreen(cout," ");
namesMultiSet.insert("Donny");
namesMultiSet.insert("Zippy");
namesMultiSet.insert("Goofy");
namesMultiSet.insert("Hungry");
namesMultiSet.insert("Goofy");
namesMultiSet.insert("Donny");
cout << "namesMultiSet:" << endl;
copy(namesMultiSet.begin(),namesMultiSet.end(),pScreen);
cout <<endl;
return 0;
}
运行结果:
intSet :
3 8 16 20
intSetA :
238 156 84 59 39 36 30
intSetA.erase:
238 156 84 39 36 30
intSetB :
238 156 84 39 36 30
intSetB.clear :
namesMultiSet:
Zippy Hungry Goofy Goofy Donny Donny