public member function
<map>

std::multimap::emplace_hint

template <class... Args>  iterator emplace_hint (const_iterator position, Args&&... args);
帶提示構建並插入元素
multimap 中插入新元素,並提供插入位置的提示。此新元素使用 args 作為構造一個value_type(即一個 pair 型別物件) 的引數就地構造。

這會將容器的 size 有效地增加一。

position 中的值用作插入點的提示。該元素仍將根據其內部 比較物件 所描述的順序插入到其相應的位置,但此提示用於函式開始搜尋插入點,當實際插入點為 position 或接近它時,可以大大加快該過程。

透過呼叫 allocator_traits::construct 並轉發 args 來就地構造元素。

等效元素的相對順序得以保留,新插入的元素將跟在其容器中已存在的等效元素之後。

引數

position
元素可插入位置的提示。
如果 position 指向將跟在插入元素後面的元素(或者指向 end,如果它是最後一個),該函式將最佳化其插入時間。
請注意,這不會強制新元素進入 multimap 容器中的那個位置(multimap 中的元素始終遵循特定順序)。
const_iterator是一個成員型別,定義為指向元素的 雙向迭代器型別。
args
用於構造插入元素的對映型別新物件的引數。
轉發給構造新元素(型別為 pair<const key_type, mapped_type>)的引數。
這可以是以下之一:
- 兩個引數:一個用於,另一個用於對映值
- 一個型別為 pair 的引數,其第一個成員是的值,第二個成員是對映值的值。
- 以 piecewise_construct 作為第一個引數,以及另外兩個引數,它們是傳遞給鍵值對映值的建構函式的元組
有關更多資訊,請參閱 pair::pair

返回值

指向新插入元素的迭代器。

成員型別iterator雙向迭代器 型別,指向一個元素。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// multimap::emplace_hint
#include <iostream>
#include <string>
#include <map>

int main ()
{
  std::multimap<std::string,int> mymultimap;
  auto it = mymultimap.end();

  it = mymultimap.emplace_hint(it,"foo",10);
  mymultimap.emplace_hint(it,"bar",20);
  mymultimap.emplace_hint(mymultimap.end(),"foo",30);

  std::cout << "mymultimap contains:";
  for (auto& x: mymultimap)
    std::cout << " [" << x.first << ':' << x.second << ']';
  std::cout << '\n';

  return 0;
}
輸出
mymultimap contains: [bar:20] [foo:10] [foo:30]


複雜度

通常是容器 size 的對數複雜度。
如果元素的插入點是 position,則為攤銷常數複雜度。

迭代器有效性

沒有變化。

資料競爭

容器已被修改。
併發訪問現有元素是安全的,但迭代容器中的範圍不是。

異常安全

強保證:如果丟擲異常,容器沒有發生變化。
如果不支援帶有適當引數的 allocator_traits::construct,則會導致未定義行為

另見