Heim >Backend-Entwicklung >C++ >Const Map Access: Warum „at()' anstelle von „operator[]' verwenden?

Const Map Access: Warum „at()' anstelle von „operator[]' verwenden?

DDD
DDDOriginal
2024-12-04 09:30:12139Durchsuche

Const Map Access: Why Use `at()` Instead of `operator[]`?

Zugriff auf Elemente in einer Const-Map: Operator[] vs. at()

Beim Arbeiten mit konstanten Maps: Zugriff auf Elemente mit Operator[ ] kann fehlschlagen. Die Verwendung von at() ist jedoch eine praktikable Alternative. Warum ist das so?

In einer nicht konstanten Karte führt Operator[] zwei Funktionen aus:

  • Wenn der Schlüssel vorhanden ist, gibt er einen Verweis auf den zugehörigen Wert zurück.
  • Wenn der Schlüssel nicht vorhanden ist, wird ein standardmäßig erstellter Wert erstellt, der dem Schlüssel zugeordnet ist, und eine Referenz darauf zurückgegeben it.

Allerdings ist es in einer const-Map dem Operator[] nicht gestattet, die zugrunde liegende Datenstruktur zu ändern. Daher kann es nur die erste Funktion ausführen und gibt einen Fehler aus, wenn versucht wird, mit der zweiten Funktion ein neues Element einzufügen.

Im Gegensatz dazu ist at() eine in C 11 eingeführte Methode speziell für den Zugriff auf Elemente in a const-Karte. Es bietet mehrere Vorteile:

  • Es löst eine std::out_of_range-Ausnahme aus, wenn der Schlüssel nicht existiert, wodurch er mit anderen Containern wie vector und deque konsistent wird.
  • Es hat eine const-Überladung, was die Verwendung auf const-Maps ermöglicht.

Aus diesen Gründen ist at() die empfohlene Methode für den Zugriff auf Elemente in einem const std::map. Der Beispielcode:

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char>& B = A;

    std::cout << B.at(3) << std::endl; // it works
    std::cout << B[3] << std::endl;    // it does not work
}

Wird ausgegeben:

c
error: can't access elements with operator[] in a const std::map

Das obige ist der detaillierte Inhalt vonConst Map Access: Warum „at()' anstelle von „operator[]' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn