multimap::find liefert nur ein Vorkommen



  • Hallo!
    Ich habe eine Multimap aus der Standard Template Library.

    --> multimap<string,int> m_id;

    Das heißt: string = Index der Map
    int = Verweis auf andere Daten

    Bekanntlich kann bei einer Multimap der Index öfter vorkommen, muss also nicht eindeutig sein.
    Wenn ich jetzt eine Suchmethode programmieren möchte, und ich verwende dazu die Funktion
    multimap::find(key);
    liefert er mir immer nur das erste Vorkommen des keys.
    Ich möchte jedoch alle Vorkommen des keys auflisten.

    Weiß jemand eine Möglichkeit, das zu realisieren?

    Danke im Voraus und schönen Sonntagnachmittag noch
    lg Gerhard



  • pair<iterator, iterator> equal_range(const key_type& k)



  • Danke vorerst für den Tipp mit der Funktion.
    Aber ich weiß leider nicht ganz wie man das jetzt in meinem Beispiel einsetzt.
    Danke im Voraus
    lg Gerhard



  • Bitte keine Mühe mehr
    Ich habs schon selber zum laufen gebracht
    Danke



  • Bei der selben Suchfunktion wie oben angeführt:
    Gibt es eine vordefinierte Funktion mit der ich nach Substrings im Key suchen kann?
    Oder müsste ich sowas zu Fuß programmieren -> alle Elemente sequentiell durchgehen und auf den Substring prüfen = sehr aufwendig bei Tausenden von Datensätzen?
    lg Gerhard



  • Sah so selbsterklärend aus 😉

    typedef std::multimap<std::string, int> IdMap;
    IdMap m_id;
    
    // ...
    
    pair<IdMap::iterator, IdMap::iterator> range = m_id.equal_range("foo");
    for ( ; range.first != range.second; ++range.first ) {
      // range.first->second ist deine id
    }
    

    edit:
    Glaub ich nicht, aber falls gleiche substrings häufiger vorkommen die Ergebnisse cachen.



  • du weißt nicht zufällig noch eine lösung auf mein 2. angesprochenes problem?
    lg gerhard



  • sorry hab das untere übersehen
    danke für deine hilfe



  • Siehe mein edit.
    Aber wenn's darum geht wirklich einfach nur schnell zu sein und du ein wenig ( 😉 ) Speicher erübrigen kannst lohnt es sich evtl. statt eine multimap zu benutzen einen Index aufzubauen, suchmaschinenmäßig.


Anmelden zum Antworten