set函數的用法:
這是一個集合函數,這個函數可以處理很多的元素,這些元素可以去重,把相同的元素都去掉,剩下不一樣的元素,而且還可以自動給這些元素來排序,從小到大的順序來排序。
這裏我們先來舉個例子:
比如:
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> a;
a.insert(1);
a.insert(9);
a.insert(6);
a.insert(6);
set<int>::iterator i=a.begin();//這裏只能使用迭代器,因爲對於set集合裏邊的元素是不能夠想訪問那個就能訪問哪個的,他是像一個棧一樣,需要從前往後一一訪問,他並不是一個指針就可以跳躍性訪問的。這裏iterator是一個迭代器,申明方法只能是這樣,當讓寫法是不一樣的也行。
while(i!=a.end())
{
cout<<(*i)<<endl;//注意這裏需要使用一個*,來代表一個迭代器所指向的那個地址的內容。。。
i++;
}
}
輸出就是1 6 9,這裏把那個重複出現的6給去掉了。
下邊再來想一個問題,能不能我不用去重的集合函數怎麼寫?當然這裏嚴格意義上說,這個並不是集合,因爲這個已經不滿足集合的互異性的性質了,但是這裏我們爲了方便起見,權且叫他集合。。。那麼這裏就需要把那個set改換成multiset,代碼如下:
#include<iostream>
#include<set>
using namespace std;
int main()
{
multiset<int> a;//改了這裏.
a.insert(1);
a.insert(9);
a.insert(6);
a.insert(6);
multiset<int>::iterator i=a.begin();//改了這裏
while(i!=a.end())
{
cout<<(*i)<<endl;
i++;
}
輸出結果:
1 6 6 9
下邊可能有同學會問,這裏能不能將這些元素從大到小來排序?
當然可以,STL是一個沒有你想得到寫不到的函數的集合,它裏邊所有的集合,只有你想不到,沒有他做不到的。。。這裏就是這樣改,把set<int>a,改成set<int,compare>a;下邊來看一下這個:
#include<iostream>
#include<set>
using namespace std;
struct compare//注意這裏很多的map,set函數之類的都是使用結構體,而像sort函數之類的是直接使用函數就行了
{
bool operator()(int a,int b){//注意這裏有2個括號,很容易遺忘,其那邊一個只是用來重載括號的,後邊一個是裏邊的參數
return a>b;
}
};
int main()
{
set<int,compare>a;//調用的時候是不一樣的,需要注意下
int i=0;
while(i++<10)
a.insert(i);
for(set<int,compare>::iterator j=a.begin();j!=a.end();j++)//還有這裏,需要特別注意
cout<<*(j)<<" ";
return 0;
}
}
輸出10 9 8 7 6 5 4 3 2 1
下邊就是直接複製別人的,大家可以去看下:
set的各成員函數列表如下:
c++ stl容器set成員函數:begin()--返回指向第一個元素的迭代器
c++ stl容器set成員函數:clear()--清除所有元素
c++ stl容器set成員函數:count()--返回某個值元素的個數
c++ stl容器set成員函數:empty()--如果集合爲空,返回true
c++ stl容器set成員函數:end()--返回指向最後一個元素的迭代器
c++ stl容器set成員函數:equal_range()--返回集合中與給定值相等的上下限的兩個迭代器
c++ stl容器set成員函數:erase()--刪除集合中的元素
c++ stl容器set成員函數:find()--返回一個指向被查找到元素的迭代器
c++ stl容器set成員函數:get_allocator()--返回集合的分配器
c++ stl容器set成員函數:insert()--在集合中插入元素
c++ stl容器set成員函數:lower_bound()--返回指向大於(或等於)某值的第一個元素的迭代器
c++ stl容器set成員函數:key_comp()--返回一個用於元素間值比較的函數
c++ stl容器set成員函數:max_size()--返回集合能容納的元素的最大限值
c++ stl容器set成員函數:rbegin()--返回指向集合中最後一個元素的反向迭代器
c++ stl容器set成員函數:rend()--返回指向集合中第一個元素的反向迭代器
c++ stl容器set成員函數:size()--集合中元素的數目
c++ stl容器set成員函數:swap()--交換兩個集合變量
c++ stl容器set成員函數:upper_bound()--返回大於某個值元素的迭代器
c++ stl容器set成員函數:value_comp()--返回一個用於比較元素間的值的函數
c++ stl集合set插入,遍歷用法舉例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include<iostream> #include<set> using namespace std; //set插入元素操作 int main() { //定義一個int型集合對象s,當前沒有任何元素.由www.169it.com蒐集整理 set< int > s; s.insert(8); //第一次插入8,可以插入 s.insert(1); s.insert(12); s.insert(6); s.insert(8); //第二次插入8,重複元素,不會插入 set< int >::iterator it; //定義前向迭代器 //中序遍歷集合中的所有元素 for (it=s.begin();it!=s.end();it++) cout<<*it<<endl; system ( "pause" ); return 0; } |