Как реализовать различное поведение `std :: map insert ()` в зависимости от существования вставляемой пары?

Я хотел бы std::map insert() Функция ведет себя по-разному в зависимости от того, находится ли пара для вставки уже на карте или нет — если это не так, вставьте ее как обычно, если она уже есть, увеличьте счетчик, хранящийся внутри second пары. Как я могу сделать это без дополнительных запросов о существовании (так как вставка запрашивает его в любом случае)?

Я отслеживаю много записей о событиях, каждая из которых содержит source а также receiver Идентификаторы. События хранятся как std::vector, Я также пытаюсь сохранить словарь sources а также receivers записи как std::map где first пары (ключ) содержит идентификатор, а second содержит некоторые source инфо плюс std::vector который отслеживает все события, которые относятся к этому source,

Итак, когда событие относится к отсутствующим в настоящее время sourceвставка должна продолжаться как обычно, но если source уже в словаре, вставка должна добавить номер события ссылки на std::vector существующего элемента словаря.

0

Решение

Похоже, нужно сохранить результат insert работать, анализировать его и вести себя соответственно:

typedef std::map<int, T> itmap;
typedef std::pair<itmap::iterator, bool> itinsresult;
//...
itmap m;
int i;
T t;
//...
itinsresult result = m.insert(std::make_pair(i, t));
if (result.second) // new element inserted
{
//...
}
else // element already exists
{
(*result.first).do_something();
// ...
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]