STL 關聯容器之集合和多重集合

目錄ios



頭文件:spa

#include <set>.net

集合和多重集合的惟一區別:多重集合能夠包含重複元素,集合不能夠包含重複元素。code


構造方法blog

  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;


操做:ip

  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()                                              清空集合

示例代碼:get

#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
string

相關文章
相關標籤/搜索