hash_map 類別
注意事項 |
---|
這個 API 已經過時。替代方案是 unordered_map 類別。 |
從每個項目都是排序索引碼的一對且是唯一的和相關聯的資料值集合快速儲存和擷取資料。
template <
class Key,
class Type,
class Traits=hash_compare<Key, less<Key> >,
class Allocator=allocator<pair <const Key, Type> >
>
class hash_map
參數
Key
要存放在雜湊地圖中的索引鍵資料類型。Type
要存放在雜湊地圖中的項目資料類型。Traits
包含兩個函式物件的類型,而類別比較來比較兩個項目值做為排序鍵來判斷其相對順序和對應項目的索引鍵值一元的述詞與型別 size_t不帶正負號的整數的雜湊函式。 這個引數是選擇性的,且 hash_compare<Key, less<Key> > 是預設值。Allocator
代表預存配置器物件 (此物件會封裝有關雜湊地圖配置和解除配置記憶體的詳細資訊) 的類型。 此引數是選擇性的,而且預設值是 allocator<pair <constKey、 Type>>。
備註
hash_map 如下:
關聯的容器,可變大小容器支援項目值是以關聯的索引鍵值有效的擷取。
可逆轉的,因為它提供雙向的迭代器以存取其項目。
可雜湊的,因為它的項目是根據雜湊函式值的套用至雜湊桶元素的索引鍵值分組。
它的項目都必須具有唯一的索引鍵。
一個成對關聯的容器,因為其元素的資料值和其索引鍵值是不同的。
樣板類別,因為它提供的功能是泛型和很獨立的做為項目或索引鍵包含資料的特定型別。 套用至項目和索引鍵的資料型別,和比較函式和配置器一起被指定為類別樣板的參數。
雜湊的主要好處在排序是較大的效率;成功的雜湊中常數的平均時間執行插入、刪除和尋找時間比較比例與項目數目的對數容器中的排序方式。 可以直接變更在 hash_map 的項目的值,除了沒有關聯的索引鍵值。 因此,與舊項目相關聯的索引鍵值必須刪除,而必須為新項目插入新的索引鍵值。
選擇容器型別時,應根據應用程式所需的搜尋和插入的型別。 雜湊關聯的容器最適合進行搜尋、插入和移除作業。 明確支援這些作業的成員函式很有效率,當搭配設計完善的雜湊函式,執行它們在期間平均常數和不相依於項目數目的容器。 設計良好的雜湊函式產生雜湊值的制式散發並降低衝突數,此衝突發生於獨特索引鍵值會對應至相同雜湊值時。 在最壞的情況下,最壞的雜湊函式,作業數目與項目數目成正比順序 (線性時間)。
表示滿足應用程式的關聯值的條件與其索引鍵時,內容 hash_map 應該是相關的容器中。 這種結構的模型與提供的定義關聯的字串值的唯一發生的關鍵字的排序清單。 如果常值有一個以上的正確定義,則索引鍵不是唯一的,hash_multimap 應是容器中。 另一方面,如果儲存文字清單,則 hash_set 是無效的容器。 如果文字的多個事件允許,則 hash_multiset 是適當的容器結構。
藉由呼叫 value_compare類別所儲存的雜湊 Traits 物件控制的 hash_map 排序序列。 這個儲存物件可以透過呼叫成員函式 key_comp 存取。 這類函式物件必須正常執行相同類別 hash_compare<Key, less<Key>>。 具體來說,為型別 Key的值為 Key ,呼叫 Traits(Key ) 產生型別 size_t的值的散發。
通常,項目必須是小於比較才能排序,因此若提供了兩個項目,可以判斷它們相等 (任一個都不小於另一個的意義),或者一個小於另一個。 這會導致在非對等元件之間的排序 在一個技術提示,比較函式是產生在標準數學概念的嚴格弱式順序的二元述詞。 二進位述詞 f(x y) 是有兩個引數 x 和 y 和回傳值 true 或 false 的函示物件。 如果二進位述詞是非反身屬性、非對稱的、可傳遞的,則給 hash_map 安排順序是嚴格弱式順序,如果等價是傳遞的,其中兩個物件的 x 和 y 定義相等,當兩個 f(x, y) 和 f(x, y) 是錯誤的。 如果索引鍵之間相等的更強狀況取代原本的相等,則該定序變得全部 (也就是所有項目的排序將有關於其他項目),因此相符索引鍵的項目與其他項目將難以辨別。
項目實際順序在受控制序列中取決於雜湊函式、排序函式及容器物件儲存的雜湊資料表的目前大小。 您無法判斷雜湊資料表的目前大小,因此,您無法預測一般項目順序是在受控制序列的。 插入項目不會使任何迭代器無效,移除項目則僅會使特別指向被移除的項目的迭代器無效。
hash_map 類別提供的迭代器是雙向的迭代器,不過類別成員函式 insert 和 hash_map 擁有以樣板參數作為較弱的輸入迭代器之版本,其功能要求較雙向迭代器的類別少。 不同的迭代器概念因其功能的修改而有關聯性。 每個迭代器概念有自己的一組需求,因此,使用它們需要限制其假定對要求的演算法由該迭代器提供。 可能會假設輸入迭代器可能已取值參考物件的陣列,而且可能會加入至序列中的下一個迭代器。 這是最小的一組功能,不過,它是足夠可以在類別成員函式中有意義地溝通有關迭代器 [First, Last) 範圍。
在 Visual C++ .NET 2003 中, <hash_map> 和 <hash_set> 標頭檔的成員不在 std 命名空間中,而是移至 stdext 命名空間。 如需詳細資訊,請參閱 stdext 命名空間。
建構函式
建構一個空的hash_map ,或者建構為其他全部、部份複製的hash_map。 |
Typedef
表示hash_map 物件的allocator 類別。 |
|
提供雙向迭代器的類型可以讀取 hash_map 中的任何 const 項目。 |
|
提供 hash_map 中 const 項目之指標的類型。 |
|
類型,其提供儲存在 hash_map 中供讀取和執行 const 作業之 const 項目的參考。 |
|
提供雙向迭代器的類型可以讀取 hash_map 中的任何 const 項目。 |
|
可以用來表示 hash_map 之項目的數目在某個範圍的項目之間的帶正負號的整數類資料型別指向迭代器。 |
|
提供隨機存取雙向迭代器的型別,可以讀取或修改 hash_map 物件中的任何項目。 |
|
可比較兩個排序鍵以判斷兩個項目在 hash_map 中的相對順序的函式物件之型別。 |
|
型別描述構成 hash_map的每個元素的排序鍵物件。 |
|
表示儲存在 hash_map 的資料型別。 |
|
提供 hash_map 中一個元素的指標。 |
|
提供 hash_map 中一個元素的參考。 |
|
提供隨機存取迭代器型別,可以讀取或修改 hash_map 物件中的任何項目。 |
|
可以表示 hash_map中的項目數不帶正負號的整數類資料型別。 |
|
可比較兩個排序鍵以判斷兩個項目在 hash_map 中的相對順序的函式物件之型別。 |
成員函式
使用指定的索引鍵值,尋找 hash_map 中的項目。 |
|
傳回迭代器,為 hash_map 中的第一個項目定址。 |
|
傳回常數迭代器,為 hash_map 中的第一個項目定址。 |
|
傳回常數迭代器,為 hash_map 中最後一個項目的下一個位置定址。 |
|
清除 hash_map 的所有元素。 |
|
傳回 hash_map 的項目數其索引鍵符合參數。 |
|
傳回常數迭代器,為反轉 hash_map 中的第一個項目定址。 |
|
傳回常數迭代器,為反轉 hash_map 中最後一個項目的下一個位置定址。 |
|
將建構的項目插入 hash_map 中。 |
|
依放置提示,將建構的項目插入 hash_map 中。 |
|
測試,如果 hash_map 是空的。 |
|
傳回迭代器,為 hash_map 中最後一個項目的下一個位置定址。 |
|
傳回一組迭代器,分別對 hash_map 中的第一個項目與大於指定按鍵和至 hash_map 的第一個項目具有等於或大於按鍵。 |
|
從 hash_map 的指定位置移除一個元素或一個範圍內的元素。 |
|
傳回迭代器有金鑰對應至指定索引鍵的項目hash_map 之位置的位址 。 |
|
傳回用來建構 hash_map 的 allocator 物件複本。 |
|
插入項目或某個範圍至 hash_map。 |
|
傳回指向 hash_map 中第一個項目的迭代器,此項目擁有等於或大於特定值的索引鍵。 |
|
傳回指向 hash_map 中第一個項目的迭代器,此項目擁有等於或大於特定值的索引鍵。 |
|
傳回 hash_map 的最大長度 |
|
傳回迭代器,指向反轉 hash_map 中的第一個項目。 |
|
傳回迭代器,為反轉 hash_map 中最後一個項目的下一個位置定址。 |
|
傳回 hash_map 的元素數目。 |
|
交換兩個 hash_map 的元素。 |
|
傳回指向 hash_map 中第一個項目的迭代器,此項目擁有大於特定值的索引鍵。 |
|
擷取 hash_map用來命令項目值比較物件的複本。 |
運算子
將具有特定索引鍵值的項目插入 hash_map 中。 |
|
用另一個 hash_map 的複本取代 hash_map 的元素。 |
需求
標頭檔: <hash_map>
**命名空間:**stdext