STL學習之set容器

2021-06-26 04:37:40 字數 2064 閱讀 2721

set容器只是單純的鍵的集合。

除了兩種例外情況外,set容器支援大部分的map操作。

建構函式:

[cpp]view plain

copy

explicit

set ( 

const

compare& comp = compare(),  

const

allocator& = allocator() );  

template

<

class

inputiterator>  

set ( inputiterator first, inputiterator last,  

const

compare& comp = compare(), 

const

allocator& = allocator() );  

set ( const

set& x );  

與map容器一樣,set容器的每乙個鍵值都只能對應乙個元素。以一段範圍的元素初始化set物件或者在set物件中插入一組元素時,對於每乙個鍵,事實上都只新增了乙個元素:     

[cpp]view plain

copy

#include 

#include 

#include 

using

namespace

std;  

intmain(

void

)    

set> iset(ivect.begin(), ivect.end());  

cout << ivect.size() << endl;  

cout << iset.size() << endl;  

return

0;  

}  

執行結果:189

由上例可以知道,set容器中儲存了vector容器中不相同的9個元素。

在set容器中新增元素

[cpp]view plain

copy

pairbool

> insert ( 

const

value_type& x );  

iterator insert ( iterator position, const

value_type& x );  

template

<

class

inputiterator>  

void

insert ( inputiterator first, inputiterator last );  

和map中此函式定義類似。

setset1;  //第一中定義

set1.insert("this");

set1.insert("hello");

//第二種定義

set::iterator positon;

postion = set1.begin();

set1.insert(position, "insert");

//第三種定義

setiset2;

iset2.insert(ivect.begin(),ivect.end());

與map容器的操作一樣,帶有乙個鍵值引數的insert返回pair型別物件,包含乙個迭代器和乙個bool值,迭代器指向擁有該鍵的元素,而bool值表明是否新增了元素。

從set容器中獲取元素

set容器中不提供下標操作符。為了通過鍵從set中獲取元素,可使用find。如果只是簡單的判定某個元素是否存在,可以使用count。

正如不能修改map中的鍵值一樣,set容器中的鍵值也是const。在獲取set容器中的某個元素迭代器後,只能對其做讀操作,而不能做寫操作:

set::iterator set = iset.find(1);

*set = 11;//錯誤

cout << *set << endl; //正確

STL容器之set用法

目錄 一 set容器概念 二 set構造和基本函式介面 三 統計和查詢 set是一種關聯式容器,底層是通過平衡二叉樹 紅黑樹 實現的,插入 刪除和查詢效率都非常高,所有元素插入容器中,會被預設以公升序的形式進行排序,而且不允許插入已經存在且相同的資料元素。此外還有乙個multiset容器,它的底層實...

STL容器Set的使用

首先了解一下set,我們所知道的set是stl中的乙個容器,但是set實質上也是有不同的版本,我們最根本的劃分就是根據其底層實現分別是紅黑樹和hash表分為兩種,首先這兩種結構最本質的區別就是有序和無序,紅黑樹的儲存是有序的而hash表是無序儲存,但它並不影響set的最主要的用法就是查詢,而從查詢角...

STL容器之 set 原理,成員函式

不可以加減運算,只能遞增遞減,因為記憶體不連續 成員方法 自定義set的排序函式 因為是二叉樹,且是比較平衡的二叉查詢樹,所以查詢效率自然是很好的,o log n o log n o logn 用的是二分查詢 隨著元素數目的增多,即橫座標x增大,縱座標,即查詢次數y log 2 xy log 2 x...