Во-первых, мог бы кто-нибудь уточнить, является ли использование оператора [] в C ++ в сочетании с unordered_map для поиска оболочкой вызов метода find () или использует оператор [] быстрее, чем find ()?
Во-вторых, в следующем фрагменте кода я подозреваю, что в тех случаях, когда ключа еще нет в unordered_map, я выполняю второй найдите с помощью строки map [key] = value
, чтобы заменить значение по умолчанию, созданное там, с помощью оператора [], когда ключ отсутствует.
Верно ли это, и если да, то есть способ (возможно, с помощью указателей или чего-то еще), что я мог бы выполнить только один поиск в любом случае (возможно, сохранив адрес, где разместить значение / прочитать значение от) и при этом добиться той же функциональности? Очевидно, это было бы полезным улучшением эффективности, если так.
Вот фрагмент модифицированного кода:
int stored_val = map[key]; // first look up. Does this wrap ->find()??
// return the corresponding value if we find the key in the map - ie != 0
if (stored_val) return stored_val;
// if not in map
map[key] = value;
/* second (unnecessary?) look up here to find position for newly
added key entry */
return value;