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 einem bool konvertieren 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() )
        //...
    

Anmelden zum Antworten