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


map::emplace

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

template<class... Args>
   pair<iterator, bool> emplace(
      Args&&... args);

Параметры

Параметр

Описание

args

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

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

pair, компонент bool значение true, если вставка была создана, и значение false, если сопоставление уже содержит элемент соответствующего значения в заказ. Компонент итератора пар возвращаемого значения указывает на вновь изменять элемент bool значение true, если компонент или на существующий элемент, если компонент bool ложен.

Чтобы получить компонент итератора pairpr используйте pr.first; для его разыменования, используйте *pr.first. Чтобы получить компонент bool используйте pr.second. См. пример, приведенный ниже в данном разделе.

Заметки

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

Во время 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: ";

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

    cout << endl;
}

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

    auto ret = m1.emplace(10, "ten");

    if (!ret.second){
        auto pr = *ret.first;
        cout << "Emplace failed, element with key 10 already exists."
            << endl << "  The existing element is (" << pr.first << ", " << pr.second << ")"
            << endl;
        cout << "map not modified" << endl;
    }
    else{
        cout << "map modified, now contains ";
        print(m1);
    }
    cout << endl;

    ret = m1.emplace(10, "one zero");

    if (!ret.second){
        auto pr = *ret.first;
        cout << "Emplace failed, element with key 10 already exists."
            << endl << "  The existing element is (" << pr.first << ", " << pr.second << ")"
            << endl;
    }
    else{
        cout << "map modified, now contains ";
        print(m1);
    }
    cout << endl;
}

Output

map modified, now contains 1 elements: (10, ten)

Emplace failed, element with key 10 already exists.
  The existing element is (10, ten)

Требования

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

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

См. также

Ссылки

<map>

Класс map

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