Эффективное использование оператора [] в C ++ unordered_map

Во-первых, мог бы кто-нибудь уточнить, является ли использование оператора [] в 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;
36
задан Adam Stelmaszczyk 30 December 2015 в 18:40
поделиться