hash_set (STL/CLR)
樣板類別說明控制不同的長度一連串的項目具有雙向 」 存取權的物件。您可以使用容器hash_set若要管理一系列項目做為雜湊資料表,每個資料表項目,儲存雙向連結的節點,以及每個節點儲存一個項目清單。每個項目的值用做為索引鍵,來排序順序。
在下列描述中GValue等同於GKey,其中依次等同於Key其餘後者則是參考型別,在這種情況是Key^。
template<typename Key>
ref class hash_set
: public
System::ICloneable,
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<GValue>,
System::Collections::Generic::ICollection<GValue>,
System::Collections::Generic::IList<GValue>,
Microsoft::VisualC::StlClr::IHash<Gkey, GValue>
{ ..... };
參數
- 機碼
受控制序列中項目的主要元件型別。
Members
型別定義 |
描述 |
---|---|
常數的 iterator 受控制序列的型別。 |
|
常數參考的項目型別。 |
|
常數的反向 iterator 受控制序列的型別。 |
|
(可能是帶正負號) 的距離,兩個元素之間的型別。 |
|
泛用介面,該容器的型別。 |
|
Iterator 容區的泛用介面的型別。 |
|
反向 iterator 容區的泛用介面的型別。 |
|
為泛用介面,該容器的項目型別。 |
|
金鑰雜湊的委派。 |
|
受控制序列的 iterator 型別。 |
|
兩個索引鍵的順序委派。 |
|
排序的索引鍵的型別。 |
|
項目之參考型別。 |
|
對於受控制序列的反向 iterator 型別。 |
|
(非負數) 之間的距離兩個項目型別。 |
|
兩個項目值排序委派。 |
|
項目的型別。 |
成員函式 |
描述 |
---|---|
指定受控制序列的開頭。 |
|
計算雜湊桶的數目。 |
|
移除所有項目。 |
|
計算符合指定的索引鍵的項目。 |
|
測試是否沒有項目呈現。 |
|
指定受控制序列的結尾。 |
|
尋找符合指定的索引鍵的範圍。 |
|
移除指定位置的項目。 |
|
尋找符合指定之索引鍵的項目。 |
|
將複製的索引鍵的雜湊的委派。 |
|
建構容器物件。 |
|
將元素加入。 |
|
將複製兩個索引鍵的順序的委派。 |
|
計算平均的項目,每個值區。 |
|
尋找符合指定的索引鍵的範圍開始。 |
|
建構值物件。 |
|
取得或設定每一桶的最大的項目。 |
|
指定已還原的受控制序列開頭。 |
|
重新建置雜湊資料表。 |
|
指定已還原的受控制序列結尾。 |
|
計數項目的數目。 |
|
交換兩個容器的內容。 |
|
將受控制的序列複製到新的陣列。 |
|
尋找符合指定的索引鍵的範圍的結尾。 |
|
將複製兩個項目值的順序的委派。 |
運算子 |
描述 |
---|---|
取代受控制的序列。 |
介面
介面 |
描述 |
---|---|
重複的物件。 |
|
序列項目。 |
|
維持群組項目。 |
|
透過型別元素的順序。 |
|
維護具型別項目的群組。 |
|
IHash < 索引鍵、 值 > |
維護泛用的容器。 |
備註
物件會配置並釋放它控制以雙向連結串列中的個別節點的順序儲存。若要加速存取,該物件也會維護不同長度的陣列指標至清單 (雜湊資料表) 的有效管理整份清單,以一連串的個子,或 buckets。它會將元素插入值區,它將保持已排序的改變而非由一個節點的內容複製到另一個節點之間的連結。也就是說,您可以插入和移除項目自由不干擾其餘的項目。
物件,它藉由呼叫預存的委派型別的物件可控制每個值區排序hash_set::key_compare (STL/CLR)。您可以指定預存的委派物件,當您建構 hash_set ; 如果您指定了委派的物件,則預設會比較operator<=(key_type, key_type)。
您可以存取的預存的委派物件藉由呼叫成員函式hash_set::key_comp (STL/CLR)()。這類委派物件必須定義索引鍵的型別之間的相等順序hash_set::key_type (STL/CLR)。也就是說,對於任何兩個機碼,在X和Y:
key_comp()(X, Y)傳回的同一個布林值會產生,在每次呼叫。
如果key_comp()(X, Y) && key_comp()(Y, X) ,就為 true, X和Y指具有相同的順序。
所有的排序規則會模仿operator<=(key_type, key_type), operator>=(key_type, key_type)或operator==(key_type, key_type) eqivalent 排序會定義。
請注意容器確保只有項目它的索引鍵有相同的順序 (以及何種雜湊為相同的整數值) 是相鄰的格式。與樣板類別不同的是hash_multiset (STL/CLR),範本類別的物件hash_set可確保所有元素的索引鍵是唯一。(沒有兩個索引鍵有相同的順序)。
物件可以決定哪些桶應該藉由呼叫預存的委派型別的物件包含指定的排序索引鍵hash_set::hasher (STL/CLR)。您呼叫成員函式來存取這個預存的物件hash_set::hash_delegate (STL/CLR)()以取得整數值,索引鍵的值而定。您可以指定預存的委派物件,當您建構 hash_set ; 如果您指定委派的物件時,預設值是函式System::Object::hash_value(key_type)。也就是說,任何索引鍵在X和Y:
hash_delegate()(X)在每次呼叫會傳回相同的整數結果。
如果X和Y有對等鍵排序,然後hash_delegate()(X)應該會傳回整數結果與相同hash_delegate()(Y)。
每個項目可作為索引鍵和值。序列都會以允許查詢、 插入,而且具有許多作業無關的序列 (固定的時間-) 中的項目數至少在最好的情況下的任意的項目移除的方式。此外,將項目失效沒有 iterator,,並移除項目會以在已移除的項目指那些 iterator 使失效。
如果雜湊的值不平均分佈的不過,可以 degenerate 雜湊資料表。最嚴重的情況-永遠會傳回相同的數值--的雜湊函式查詢、 插入及移除會成比例的序列 (線性時間) 中的元素數目。儘量選擇合理的雜湊函式、 平均桶大小、 容器和雜湊資料表大小 (的雜湊桶的總數目),但您可以覆寫任何或所有這些選項。請參閱,比方說,函式hash_set::max_load_factor (STL/CLR)和hash_set::rehash (STL/CLR)。
Hash_set 支援雙向 iterator,這表示您可以前往相鄰的項目提供 iterator,指派受控制序列中的項目。特殊的主節點相對於所傳回的 iterator hash_set::end (STL/CLR)()。如果有的話,您可以減少到達最後一個項目,在受控制序列中,這個 iterator 的規定。您可以遞增 hash_set iterator 到達主節點,以及它接著會比對是否等於end()。您不能解除參考所傳回的 iterator,但是end()。
請注意,您不能直接指定其數值的位置-需要隨機存取 iterator 的 hash_set 項目參照。
Hash_set iterator 會儲存到其相關聯的 hash_set 節點中,依序會儲存與其相關聯的容器的控制代碼的控制代碼。Iterator 只適用於其相關的容器物件。Hash_set iterator 會保持有效,只要其相關聯的 hash_set 節點已經有一些 hash_set。此外,有效的 iterator 是 dereferencable--您可以使用它來存取或修改後,它指定-項目值,只要不等於書籤end()。
正在清除或移除項目儲存的值會呼叫解構函式。摧毀容器時,會清除所有項目。因此,的容器,其元素型別是一種 ref 類別可確保沒有項目 outlive 的容器。不過請注意,容器的控制代碼不會not摧毀它的項目。
需求
標頭: < cliext/hash_set >
Namespace: cliext