Den Operator [] effizient mit C ++ unordered_map verwenden

Erstens könnte jemand klären, ob in C++ die Verwendung der [] - operator in Verbindung mit einer unordered_map für Suchvorgänge umschließt einen Aufruf der find() Methode, oder über den [] - operator schneller als die find()?

Zweitens, in der das folgende Stück code, ich vermute, dass in den Fällen, wo der Schlüssel ist nicht schon in der unordered_map ich bin der Durchführung einer zweiten look-up durch die Linie map[key] = value um zu ersetzen Sie den Standardwert erstellt wurde es mit dem [] - operator, wenn ein Schlüssel nicht vorhanden ist.

Ist das wahr und wenn ja gibt es eine Möglichkeit (vielleicht durch die Verwendung von Zeigern oder so), dass ich vielleicht nur ein Blick in jedem Fall (vielleicht durch die Speicherung der Adresse, wo ein Wert/lese einen Wert aus) und immer noch erreichen die gleiche Funktionalität? Offensichtlich wäre dies eine nützliche Verbesserung der Effizienz, wenn dem so ist.

Hier ist der geänderte code-Auszug:

    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;

InformationsquelleAutor der Frage ComethTheNerd | 2011-08-01

Schreibe einen Kommentar