map::find // Gibt es eine Möglichkeit ein "Nichtfinden" als false herauszugeben?
-
Okay, eigentlich steht meine Frage schon in der Überschrift. Nehmen wir an ich suche in einer map nach einem Key und finde diesen nicht, dann krieg ich einen STATUS_ACCESS_VIOLATION-Fehler.
Kann ich ein false ausgeben lassen, um eine if-Abfrage einzubauen? Ich finde einfach nichts passendes ...
Thx
Bis denne!
-
Cpp Reference schrieb:
...
Return value
An iterator to the element, if the specified key value is found, or map::end if the specified key is not found in the container.Both iterator and const_iterator are member types. In the map class template, these are bidirectional iterators.
Dereferencing this iterator accesses the element's value, which is of type pair<const Key,T>.Greets
Tobi
-
Mathias1986 schrieb:
Nehmen wir an ich suche in einer map nach einem Key und finde diesen nicht, dann krieg ich einen STATUS_ACCESS_VIOLATION-Fehler.
Nein. Du bekommst einen end-Iterator.
if (mymap.find(blabla) == mymap.end()) // örks, nicht gefunden
-
das find in der map gibt doch einen iterator zurück?!
den kannst testen ob er das ende der map zeigt.std::map<int int> m; // ... auto it = std::find(1); bool found = it != m.end();achtung: wenn du statt find den operator[] nutzt wird zur not der gescuhte key erstellt, anstatt dass nicht zurückgegeben wird...
std::map<int, int> m; m[10] = 100; std::cout << m[1] << std::endl; // da wird kein fehler kommen, aber ab jetzt ist die map.size() == 2
-
Wenn du nur wissen moechtest, ob ein Key existiert, nimm die Membermethode
count(). Die ist da einfacher, da sich der Rueckgabewert einfach zu einemboolkonvertieren laesst.if( m.count(2) )Wenn du dagegen, falls der Key existiert, gleich damit arbeiten moechtest, nimm das:
std::map<.....>::iterator iter = mymap.find( 2 ); if( iter != mymap.end() ) //...