Set集合的使用

2022-03-26 20:35:55 字數 1942 閱讀 8961

#include#include

using

namespace

std;

typedef

struct

type;

struct

compare

};set

seta;

intmain()

output:

1 :3 1 2 4 

2 :a b c d

構造set集合主要目的是為了快速檢索,不可直接去修改鍵值。

set 容器模版需要3個泛型引數,如下:

templateclass set;

第乙個t 是元素型別,必選;

第二個c 指定元素比較方式,預設為 less, 即使用 < 符號比較;

第三個a 指定空間分配物件,一般使用預設型別。

因此:(1) 如果第2個泛型引數你使用預設值的話,你的自定義元素型別需要過載 < 運算操作;

(2)如果你第2個泛型引數不使用預設值的話,則比較物件必須具有 () 操作,即:

bool operator()(const t &a, const t &b)

1.元素插入:insert()

2.中序遍歷:類似vector遍歷(用迭代器)

3.反向遍歷:利用反向迭代器reverse_iterator。

例:sets;

......

set::reverse_iterator rit;

for(rit=s.rbegin();rit!=s.rend();rit++)

4.元素刪除:與插入一樣,可以高效的刪除,並自動調整使紅黑樹平衡。

sets;

s.erase(2);        //刪除鍵值為2的元素

s.clear();

5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最後乙個元素後面乙個位置。

sets;

set::iterator it;

it=s.find(5);    //查詢鍵值為5的元素

if(it!=s.end())    //找到

cout<<*it<

else            //未找到

cout<<"未找到";

6.自定義比較函式

(1)元素不是結構體:

例://自定義比較函式mycomp,過載「()」操作符

struct mycomp

}sets;

......

set::iterator it;

(2)如果元素是結構體,可以直接將比較函式寫在結構體內。

例:struct info

}sets;

......

set::iterator it;

#include #include 

using

namespace

std;

bool fncomp (int lhs, int rhs)

struct

classcomp

};int

main ();

set second (myints,myints+5); //

pointers used as iterators

set third (second); //

a copy of second

set fourth (second.begin(), second.end()); //

iterator ctor.

set fifth; //

class as compare

bool(*fn_pt)(int,int) =fncomp;

set sixth (fn_pt); //

function pointer as compare

return0;

}

set集合使用詳解

曾經年少愛追夢,一心只想往前飛。那會高二,剛剛接觸c語言,一發不可收拾,還記得當時為了乙個想法和朋友一起想到半夜。現在我還是那個少年,那個又菜又愛玩的少年。寫法 說明set type s 定義乙個集合s s.insert item 把item放入s集合裡面 s.erase item 刪除元素item...

Set集合和Map集合的使用方法

set是乙個無序的 不重複的集合 它主要的特點就是不重複 主要用來去重 我們使用set集合的時候 需要new 也就是說他是乙個物件 1.使用 使用的時候 必須先進行例項化 可以傳遞乙個引數 引數是可選 如果傳遞引數 引數是陣列 返回的結果是set集合 去重之後的陣列 set集合 let arr 11...

Collection集合 (set集合)

不包含重複元素的集合 即使新增重複元素之後,最終也只能顯示乙個 沒有帶索引的方法,所以不能使用普通的for迴圈遍歷 hashset 對集合的迭代順序不作任何保證 object類中有乙個方法可以獲取物件的雜湊值 public int hashcode 返回物件的雜湊碼值 物件的雜湊值特點 同乙個物件多...