Есть ли эквивалент C ++? std::map::insert
но для C # SortedDictionary
(или аналогичный контейнер), который также указывает на успех или неудачу вставки, и который также предоставил доступ к существующей паре ключ-значение в случае неудачной вставки?
По сути: я хочу попробовать добавить новый ключ & пара значений, или, если соответствующий ключ уже существует, получить соответствующее значение и что-то с ним сделать, без понести потенциально (субъективно) изрядные затраты на 2 лота обхода контейнера, что тривиально сделать в C ++?
Насколько я могу видеть, я могу попытаться добавить новую пару ключ-значение (которая должна выполнять некоторую обработку контейнера). Если это не удается, я должен поймать исключение, которое указывает, что ключ уже существует, а затем я должен найти существующую пару k-v (предположительно, другой обход контейнера), чтобы получить соответствующее значение, которое я теперь могу изменить. Кроме того, я могу просто искать, существует ли ключ в первую очередь (один обход). Если нет, то я хочу добавить новую пару k-v (которая может включать в себя много работы по обходу). В любом случае, наихудший случай — это 2 много потенциально дорогих обходов, в то время как std :: map :: insert в C ++ предоставляет эффективный механизм для достижения того, чего я хочу, используя только 1 обход.
В интересах других, отсутствие ответов заставляет меня заключить, что не существует эквивалента «попытаться вставить новое значение ключа в карту, но если ключ уже есть, скажите мне и дайте мне, что существующий ключ & значение «операция, такая как std :: map :: insert для стандартного словаря или SortedDictionary в c #. Это похоже на упущение в дизайне этих контейнеров.
Однако, спасибо @DragandDrop в комментариях выше за ответ, что есть ConcurrentDictionary ‘AddOrUpdate’ или ‘GetOrAdd’, который позволит запрошенное поведение в одном обходе (хотя, очевидно, с дополнительными издержками механизма блокировки, которые, в зависимости от использование, может перевесить двойные обходы обычных контейнеров Dictionary / SortedDictionary).
Других решений пока нет …