共用方式為


set 類別

STL 容器類別 set 用於在集合中儲存和擷取資料,集合中包含的項目值是唯一的,而且這些項目值做為索引鍵值,據此自動排序資料。 集合中項目的索引鍵值不能直接變更。 相反地,必須刪除舊值,並插入具有新值的項目。

template <
    class Key, 
    class Traits=less<Key>, 
    class Allocator=allocator<Key> 
>
class set

參數

  • Key
    要存放在集合中的項目資料類型。

  • Traits
    類型,提供可以將兩個項目值做為排序鍵進行比較的函式物件,以判斷項目在集合中的相對順序。 這個引數是選擇性的,而且二元述詞 less <Key> 是預設值。

  • Allocator
    代表預存配置器物件的類型,封裝有關集合之記憶體配置和解除配置的詳細資訊。 這個引數是選擇性的,而且預設值是 allocator*<Key>。*

備註

STL 集合是:

  • 關聯的容器,為可變大小容器,支援項目值以關聯的索引鍵值為基礎、有效率的擷取。 此外,它是簡單關聯的容器,因為其項目值是其索引鍵值的。

  • 可逆轉的,因為它提供雙向的迭代器以存取其項目。

  • 已排序,因為其項目是依據指定的比較函式,由容器內的索引鍵值排序。

  • 唯一,因為它的每個項目都必須具有唯一索引鍵。 因為集合也是簡單的關聯容器,所以其元素也是唯一的。

集合也描述成樣板類別,因為它提供的功能是泛型,因此與做為項目包含的特定資料類型是獨立的。 使用的資料類型是在類別樣板中指定為參數 (和比較函式與配置器一起指定)。

選擇容器類型時,通常應根據應用程式所需的搜尋和插入類型。 關聯的容器已針對查閱、插入和移除作業最佳化。 明確支援這些作業的成員函式很有效率,以與容器中的項目數目之對數成正比的平均時間執行它們。 插入項目不會使任何迭代器無效,移除項目則僅會使特別指向被移除項目的迭代器無效。

當關聯值與其索引鍵的條件由應用程式滿足時,集合應該是首選的關聯容器。 集合的項目是唯一的,並當做自己的排序鍵。 例如,這種結構的模型是文字的已排序清單,其中文字只可以出現一次。 如果允許文字的多個項目,則集合是適當的容器結構。 如果值必須附加至唯一關鍵字清單,則對應是包含這個資料的適當結構。 如果索引鍵不是唯一的,則多重對應是首選容器。

集合會藉由呼叫 key_compare 類型的預存函式物件,排序它所控制的序列。 這個預存物件是可藉由呼叫成員函式 key_comp 存取的比較函式。 通常,項目必須是小於比較才能建立此順序,因此若提供了兩個項目,可以判斷它們相等 (任一個都不小於另一個的意義),或者一個小於另一個。 這會導致非對等元件之間的排序。 一個技術提示,比較函式是在標準數學概念上產生嚴格弱式順序的二元述詞。 二元述詞 f(x,y) 是有兩個引數物件 xy 以及傳回值 truefalse 的函式物件。 如果二元述詞為非反身屬性、非對稱、可轉移的,而且如果等價是可轉移的,其中兩個物件 xyf(x,y) 和 f(y,x) 為 false 時定義為相等,則施加於集合的順序是嚴格弱式順序。 如果更強的索引鍵相等條件取代等價條件,順序會變成總計 (也就是所有項目彼此相關的排序),因此相符的索引鍵之間將難以辨別。

set 類別提供的迭代器是雙向的迭代器,不過類別成員函式 insertset 擁有以較弱的輸入迭代器做為樣板參數之版本,其功能需求較雙向迭代器的類別少。 不同的迭代器概念因其功能的修改而形成關聯的系列。 每個迭代器概念有自己的一組需求,因此使用它們的演算法必須將其假設限制為該迭代器類型的需求。 可假設輸入迭代器可能已取值來參考某個物件,而且可能會遞增為序列中的下一個迭代器。 這是最小的一組功能,不過,已足以在類別成員函式的內容中有意義地溝通有關迭代器範圍 [First, Last)。

建構函式

set

建構一個空的集合,或者建構其他集合的全部或部分複本。

Typedef

allocator_type

類型,表示 set 物件的 allocator 類別。

const_iterator

提供雙向迭代器的類型,這個迭代器可以讀取集合中的 const 項目。

const_pointer

類型,提供集合中 const 項目之指標。

const_reference

類型,提供儲存在集合中供讀取和執行 const 作業之 const 項目的參考。

const_reverse_iterator

提供雙向迭代器的類型,這個迭代器可以讀取集合中的任何 const 項目。

difference_type

帶正負號的整數類型,可以用來表示範圍 (介於迭代器所指的項目) 中集合的項目數。

iterator

類型,提供可以讀取或修改集合中之任何項目的雙向迭代器。

key_compare

類型,提供可以比較兩個排序鍵的函式物件,以判斷兩個項目在集合中的相對順序。

key_type

此類型描述在做為排序鍵的產能上,做為集合的項目儲存的物件。

指標

類型,提供集合中的項目之指標。

reference

類型,提供儲存在集合中之項目的參考。

reverse_iterator

類型,提供可以讀取或修改反轉集合中之項目的雙向迭代器。

size_type

不帶正負號的整數類型,可以表示集合中的項目數。

value_compare

類型,提供可比較兩個項目之函式物件,以判斷項目在集合中的相對順序。

value_type

此類型描述在做為值的產能上,做為集合的項目儲存的物件。

成員函式

begin

傳回迭代器,為集合中的第一個項目定址。

cbegin

傳回常數迭代器,為集合中的第一個項目定址。

cend

傳回常數迭代器,為集合中最後一個項目的下一個位置定址。

clear

清除集合的所有項目。

count

傳回集合中索引鍵符合參數指定之索引鍵的項目數目。

crbegin

傳回常數迭代器,為反轉集合中的第一個項目定址。

crend

傳回常數迭代器,為反轉集合中最後一個項目的下一個位置定址。

emplace

將就地建構的項目插入集合中。

emplace_hint

將就地建構的項目 (含位置提示) 插入集合中。

empty

測試集合是否為空白。

end

傳回迭代器,為集合中最後一個項目的下一個位置定址。

equal_range

傳回一組迭代器,分別指向集合中索引鍵大於特定索引鍵的第一個項目,以及指向集合中索引鍵等於或大於該索引鍵的第一個項目。

erase

從指定的位置移除集合中的項目或項目範圍,或移除符合指定之索引鍵的項目。

find

傳回迭代器,定址集合中索引鍵等於指定索引鍵之項目的位置。

get_allocator

傳回用來建構集合的 allocator 物件複本。

insert

將項目或某個項目範圍插入集合中。

key_comp

擷取集合中用來排序索引鍵的比較物件之複本。

lower_bound

傳回迭代器,指向集合中索引鍵等於或大於特定索引鍵的第一個項目。

max_size

傳回集合的最大長度。

rbegin

傳回迭代器,為反轉集合中的第一個項目定址。

rend

傳回迭代器,為反轉集合中最後一個項目的下一個位置定址。

size

傳回集合中項目的數目。

交換

交換兩個集合的項目。

upper_bound

傳回迭代器,指向集合中索引鍵大於特定索引鍵的第一個項目。

value_comp

擷取集合中用於排序項目值的比較物件之複本。

運算子

operator=

用另一個集合複本取代集合的項目。

需求

標頭:<set>

命名空間: std

請參閱

參考

<set>

C++ 標準程式庫中的執行緒安全

標準樣板程式庫

概念

容器