Главное меню » Практика » std::map — поиск и вставка в одну строку

std::map — поиск и вставка в одну строку

Существует эффективный способ решения одной стандартной для контейнера std::map проблемы, а именно выполнение следующей последовательности: Выполнить поиск элемента в контейнере std::map и, если искомого элемента не существует, вставить его.

Если вы использовали контейнер std::map, то наверняка уже столкнулись с одной проблемой, а именно:

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

Но приведенный выше код фунции InsertNewItem() кажется немного неаккуратным для такой простой задачи. Однако, STL уже предоставляет нам решение этой проблемы. Контейнер std::map уже имеет перегруженную версию функции-члена insert():

Функция std::map::insert() возвращает std::pair. Первый член этой пары является итератором. Он всегда указывает на элемент в std::map, причем не важно был ли этот элемент только что вставлен или уже был до этого в контейнере. Второй элемент пары представляет собой булевское значение, равное true, если соотв. ключ был найден до вставки нового элемента. Проще говоря, эта функция реализует следующую семнтику: «Скажите мне, если этот ключ уже существует в контейнере, и, если не существует, то добавь в контейнер новый элемент с этим ключем».

Теги: