公有成員函式
<unordered_map>

std::unordered_map::emplace_hint

template <class... Args>iterator emplace_hint ( const_iterator position, Args&&... args );
帶提示構建並插入元素
如果鍵是唯一的,則在 `unordered_map` 中插入一個新元素。該新元素使用 `args` 作為元素建構函式的引數,在原地進行構造。position指向容器中的一個位置,該位置被建議作為搜尋插入點的提示(容器可能使用也可能不使用此建議來最佳化插入操作)。

只有當容器中沒有鍵與要插入的鍵等效的元素時,才會進行插入(`unordered_map` 中的鍵是唯一的)。

如果成功插入,則容器的 size 會增加一。

存在一個類似的成員函式 insert,它會複製或移動現有物件到容器中,並且也可能接受一個位置提示。

引數

position
作為插入操作的插入位置提示。該值可能被容器用來最佳化操作。
成員型別const_iterator是一個 forward iterator 型別。
args
用於構造插入元素 `mapped_type` 的新物件的引數。
轉發給用於構造新元素(型別為 `pair<const key_type, mapped_type>`)的引數。
可以是以下之一:
- 兩個引數:一個用於 `key`,另一個用於 `mapped_value`。
- 一個型別為 `pair` 的引數,其第一個成員是 `key` 的值,第二個成員是 `mapped_value` 的值。
- 第一個引數為 `piecewise_construct`,外加兩個額外的引數,這兩個引數是 `tuple`,將分別作為 `key value` 和 `mapped value` 的引數轉發。
有關更多資訊,請參閱 `pair::pair

返回值

指向容器中鍵與新插入元素等效的元素的迭代器。如果新元素被插入,則指向新插入的元素;如果已存在等效的鍵,則指向該現有元素(不會被替換)。

成員型別iterator是一個 forward iterator

新元素的儲存使用allocator_traits<allocator_type>::construct()分配,這在失敗時可能會丟擲異常(對於預設的 allocatorbad_alloc如果分配請求不成功,則丟擲)。

示例

暫無示例。請參閱 unordered_map::emplace 的示例。

複雜度

平均情況:常量。
最壞情況:容器大小的線性。
可能會觸發 rehash(未包含)。

迭代器有效性

在大多數情況下,插入後容器中的所有迭代器都保持有效。唯一的例外是當容器的增長強制重新雜湊時。在這種情況下,容器中的所有迭代器都將失效。

如果插入操作後容器的新 size 將超過其容量閾值(計算方法為容器的 bucket_count 乘以其 max_load_factor),則會強制進行 rehash。

在所有情況下,即使在 rehash 之後,引用仍然保持有效。

另見