參考書籍:
《挑戰程式設計競賽》巫澤俊 主譯
《算法競賽入門經典》劉汝佳 著
一、集合set是什麼?應用在哪?
集合與映射是兩個常用的容器。在數學中集合具有互異性、無序性和确定性。
在程式設計中,我們緊緊把握住集合的互異性【任意一個元素不會在集合中出現多次】
而集合的無序性在C++中被丢棄,為了實際應用的便捷,在STL庫中的set集合建立并插入元素後,會自動以從小到大的順序排列。
是以集合這一容器常用于在一堆有重複的數或者字元串等資料中篩出所有不同的資料。
下面通過一個程式來熟悉set的各種基本用法:
二、set使用
這裡列舉最常用的一些功能和方法:建立(正序/倒序)、插入、疊代器、輸出、删除。
這裡特别提一下,所謂疊代器,如果不好了解可以看做C語言的指針,指着集合中的每一個元素。并通過*疊代器的方式得到元素值。
通過一個程式了解所有常用方法:
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
//聲明string類型從小到大排列的集合
set<string> s1;
//聲明int型從大到小排列的集合
set<int,greater<int> > s2; //<int>後面一定要空一格!
int main()
{
//向集合中插入元素
s1.insert("aaa");
s1.insert("ccc");
s1.insert("bbb");
s1.insert("aaa");//該語句等效于沒有作用
//.count()方法隻可能輸出0或1,因為集合有互異性
cout<<s1.count("aaa");//1
//建立一個疊代器
set<string>::iterator it1;
//查找元素
it1=s1.find("aaa");
//單獨輸出某一個元素的方式
cout<<*it1<<endl;//疊代器類似于指針,讀出内容時需要前面加*
//輸出所有元素
for(it1=s1.begin();it1!=s1.end();it1++){
cout<<*it1<<" ";
}//aaa bbb ccc,按字典順序輸出
cout<<endl;//換行
s2.insert(1);
s2.insert(3);
s2.insert(2);
set<int>::iterator it2;
for(it2=s2.begin();it2!=s2.end();it2++){
cout<<*it2<<" ";
} //3 2 1
cout<<endl;
//删除元素
s2.erase(2);
for(it2=s2.begin();it2!=s2.end();it2++){
cout<<*it2<<" ";
}//3 1
return 0;
}
完整運作結果: