Я хотел бы std::map insert()
Функция ведет себя по-разному в зависимости от того, находится ли пара для вставки уже на карте или нет — если это не так, вставьте ее как обычно, если она уже есть, увеличьте счетчик, хранящийся внутри second
пары. Как я могу сделать это без дополнительных запросов о существовании (так как вставка запрашивает его в любом случае)?
Я отслеживаю много записей о событиях, каждая из которых содержит source
а также receiver
Идентификаторы. События хранятся как std::vector
, Я также пытаюсь сохранить словарь sources
а также receivers
записи как std::map
где first
пары (ключ) содержит идентификатор, а second
содержит некоторые source
инфо плюс std::vector
который отслеживает все события, которые относятся к этому source
,
Итак, когда событие относится к отсутствующим в настоящее время source
вставка должна продолжаться как обычно, но если source
уже в словаре, вставка должна добавить номер события ссылки на std::vector
существующего элемента словаря.
Похоже, нужно сохранить результат 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();
// ...
}
Других решений пока нет …