Ist der at () const-Accessor für den Kartenstandard in C ++ 11?

8

Ich habe versucht, herauszufinden, wie man einen Wert aus einer Map in einer const-Methode zurückgibt, und stolperte über die Methode at () für map in gcc 4.6.

Als ich das nachgesehen habe, habe ich gemerkt, dass es nicht Standard ist:

Der C ++ Map Access verwirft Qualifier (const)

Aber es ist sicherlich viel weniger wortreich als der Ansatz find (). Ich habe mich gefragt, ob das C ++ 11 das behoben hat - ist at () für Map Teil des neuen Standards?

    
daj 09.09.2011, 05:01
quelle

1 Antwort

17

Ja. std::map hat eine at -Memberfunktion in C ++ 11 mit der folgenden Spezifikation (23.4.4.3/9):

%Vor%      

Rückgabe: Ein Verweis auf den zugeordneten Typ, der x in *this entspricht.

     

Auslöser: Ein Ausnahme-Objekt vom Typ out_of_range , wenn kein solches Element vorhanden ist.

     

Komplexität: logarithmisch.

Beachten Sie jedoch, dass diese Elementfunktion speziell zu std::map hinzugefügt wurde. Dies ist für die allgemeinere assoziative Container -Anforderung nicht erforderlich. Wenn Sie generischen Code schreiben, der einen assoziativen Containertyp benötigt, können Sie diesen neuen at nicht verwenden. Stattdessen sollten Sie weiterhin find , das Teil des assoziativen Containers -Konzepts ist, verwenden oder einen eigenen Nichtmitgliedshelfer schreiben:

%Vor%

Oder, wenn Sie eine Implementierung haben, die rvalue-Referenzen und decltype unterstützt, brauchen Sie keine zwei Überladungen:

%Vor%

(Oder etwas in der Nähe davon; ein Spaß an C ++ 11 ist, dass keine zwei Compiler die gleichen Fehler haben und alle etwas unterschiedliche Teilmengen von gültigem - und ungültigem - C ++ 11 Code zu akzeptieren scheinen.)

    
James McNellis 09.09.2011, 05:05
quelle

Tags und Links