Пусть я две картыОбъединить две карты <string,int>
std::map<string,int> mapA;
mapA["cat"] = 1;
mapA["dog"] = 3;
, то другой карта mapB
std::map<string,int> mapB;
mapB["cat"] = 1;
mapB["horse"] = 3;
Теперь нужно объединить mapB в МАПО поэтому окончательный MAPA выглядит следующим образом после слияния
mapA["cat"] = 2;
mapA["dog"] = 3;
mapA["horse"] = 3;
Я хотел знать, как наилучшим образом достичь этого? Я знаю, что я мог бы перебирать через MapB и проверять, есть ли каждый элемент в MapA, если он затем увеличивает значение в противном случае. Добавьте его в MapA. Мой вопрос в том, есть ли алгоритм или более эффективный подход?
Алгоритм, который может быть более эффективным, чем прямой подход, может попытаться использовать тот факт, что обе карты используют один и тот же порядок. К сожалению, 'map :: insert', который принимает подсказку, не возвращает, мог ли элемент быть найден (если бы это было возможно, вы могли бы попытаться использовать прежний целевой элемент в качестве подсказки для следующего). – dyp
Эскиз алгоритма 'O (N + M) в наилучшем случае: http://coliru.stacked-crooked.com/a/0932b4743edf9824 Я мог бы смущаться о позиции подсказки/вставки. – dyp