STL 关联容器之集合和多重集合

目录



头文件:

#include <set>

集合和多重集合的唯一区别:多重集合可以包含重复元素,集合不可以包含重复元素。


构造方法

  1. ctType<type> ct                                       创建空集合 <
  2. ctType<type,sort> ct                               创建自定义排序方式的空集合
  3. ctType<type> ct(otherCt)                       用另外的集合 创建集合 <
  4. ctType<type,sort> ct(otherCt)               用另外的集合创建自定义排序方式的集合
  5. ctType<type> ct(beg,end)                     用另外的集合 创建集合 < ,从beg 到end + 1
  6. 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;


操作:

  1. ct.insert(elem)                                     插入元素,返回是否成功
  2. ct.insert(pos,elem)                             从某个位置开始搜索插入,返回插入的位置
  3. ct.insert(beg,end)                               将beg到end-1的所有元素插入到ct中
  4. ct.erase(elem)                                    删除元素,返回删除的个数
  5. ct.erase(pos)                                      删除指定位置上的元素,不返回任何值
  6. ct.erase(beg,end)                              删除一段位置的值,不返回任何值
  7. 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


原文地址:https://www.cnblogs.com/wjchang/p/3671649.html