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...