GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Woher weiß ich, ob das Einfügen von std::map erfolgreich war oder fehlgeschlagen ist?

Tatsächlich gibt die Einfügemethode, die einen Hinweisparameter annimmt, nicht zurück, ob die Einfügung erfolgreich war oder nicht. Eine Möglichkeit zu überprüfen, ob das Einfügen tatsächlich stattgefunden hat, besteht darin, die Größe der Karte vor und nach dem Einfügen zu überprüfen. Wenn es dasselbe ist, dann ist das Einfügen fehlgeschlagen (d. h. der Schlüssel war bereits vorhanden). Ich weiß, es klingt hässlich, aber das ist der effizienteste Weg, der mir einfallen könnte. Tatsächlich glaube ich, dass es keinen zwingenden Grund dafür gibt, dass die Einfügung mit einem Hinweis kein Paar (einschließlich des bool) zurückgeben sollte, genau wie die reguläre Einfügung ohne Hinweis. Aber sobald es in einem älteren Standard spezifiziert wurde, ist es sehr schwer, es zu ändern, da es sich um eine bahnbrechende Änderung handelt, die die C++-Community meistens ablehnt.

Ursprüngliche (falsche) Antwort

Siehe diesen Link

... gibt ein Paar mit seinem Element pair::first zurück set auf einen Iterator, der entweder auf das neu eingefügte Element oder auf das Element zeigt, das bereits denselben Wert in der Map hatte. Die pair::second Das Element im Paar wird auf true gesetzt, wenn ein neues Element eingefügt wurde, oder auf false, wenn ein Element mit demselben Wert vorhanden war.

Der Link enthält auch ein Beispiel

Zum Beispiel:

if(mp.insert(make_pair(key, value)).second == false)
{
   cout << "Insertion failed. Key was present"
}

typedef std::map<std::string, int> map;
map m;
std::pair<map::iterator,bool> result = m.insert(std::make_pair("hi", 42));

result.second enthält, was Sie wollen


Es hängt davon ab, was Sie mit fehlgeschlagen oder erfolgreich meinen.

std::map::insert ist erfolgreich, wenn es das neue Element einfügt, andernfalls gibt es einen Iterator an ein bereits vorhandenes Element zurück.

std::map::insert schlägt fehl, wenn nicht genügend Speicher vorhanden ist, um ein neues Element einzufügen, und löst std::bad_alloc aus .


Linux
  1. Woher weiß ich, ob Dd noch funktioniert?

  2. Woher weiß Bash, wie es aufgerufen wird?

  3. Linux – Woher wissen Sie, wofür Sie in Dmesg grep müssen?

  4. So ersetzen Sie ein ausgefallenes Btrfs-Gerät

  5. Wie kann man beenden, wenn ein Befehl fehlgeschlagen ist?

So listen Sie erfolglose SSH-Anmeldungen unter Linux auf

So installieren Sie AutoFS unter Linux

Wie man die Gruppen eines Linux-Benutzers kennt

Wie behauptet man, ob ein std::mutex gesperrt ist?

Wie teilt man die Internetverbindung?

So erkennen Sie, ob eine Festplatte eine SSD oder eine HDD ist