Поделиться через


map::emplace_hint

Вставляет элемент построен на месте (отсутствует операции копирования или перемещения), не выполняются с подсказками размещения.

template<class... Args>
   iterator emplace_hint(
      const_iterator where,
      Args&&... args);

Параметры

Параметр

Описание

args

Аргументы переадресованные для построения элемента, который необходимо вставить в сопоставление, если сопоставление уже не содержит этот элемент, или в общем случае, если он еще не содержит элемент ключ которого соответствующе упорядочен.

where

Место, чтобы начать поиск нужной точки вставки. (Если эта точка непосредственно предшествующего where, вставка может произойти в амортизированном постоянно времени вместо логарифмического времени).

Возвращаемое значение

Итератор во вновь изменять элемент.

Если вставка завершился ошибкой, поскольку элемент уже существует, возвращает итератор на существующий элемент со значением ключа.

Заметки

Нет итераторы или ссылки является действительным этой функцией.

Во время emplacement, если исключение, не изменяется состояние контейнера.

value_type элемента пары, так как значение элемента будет приказанными парами с первым компонентом, значение ключа и вторым компонентом, к данным значение элемента.

Пример

// map_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>

using namespace std;

template <typename M> void print(const M& m) {
    cout << m.size() << " elements: " << endl;

    for (const auto& p : m) {
        cout << "(" << p.first <<  "," << p.second << ") ";
    }

    cout << endl;
}

int main()
{
    map<string, string> m1;

    // Emplace some test data
    m1.emplace("Anna", "Accounting");
    m1.emplace("Bob", "Accounting");
    m1.emplace("Carmine", "Engineering");

    cout << "map starting data: ";
    print(m1);
    cout << endl;

    // Emplace with hint
    // m1.end() should be the "next" element after this emplacement
    m1.emplace_hint(m1.end(), "Doug", "Engineering");

    cout << "map modified, now contains ";
    print(m1);
    cout << endl;
}

Output

map starting data: 3 elements:
(Anna,Accounting) (Bob,Accounting) (Carmine,Engineering)

map modified, now contains 4 elements:
(Anna,Accounting) (Bob,Accounting) (Carmine,Engineering) (Doug,Engineering)

Требования

Заголовок:<map>

Пространство имен: std

См. также

Ссылки

<map>

Класс map

Библиотека стандартных шаблонов