C裏邊的STL裏邊的Set函數

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; 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章