2 Stimmen

Ungeordnete Multimap zur Suche aller Werte

Ich möchte sehen, ob es möglich ist, alle Werte zu sehen, die wir platziert haben. Zum Beispiel:

#include 
#include 

using namespace std;

int main () {
    unordered_multimap hash;

    hash.emplace("Hallo", 12);
    hash.emplace("Welt", 22);
    hash.emplace("Wofh", 25);
    for (int i = 1; i < 10; i++) {
        hash.emplace("Wofh", i);
    }
    cout << "Hallo " << hash.find("Hallo")->second << endl;
    cout << "Wofh " << hash.count("Wofh") << endl;
    cout << "Wofh " << hash.find("Wofh")->second << endl;

    return 0;
}

Die Ausgabe ist:

$ ./stlhash
Hallo 12
Wofh 10
Wofh 9

Ich möchte jedoch, dass die letzte Zeile von 25,1,2... bis 9 angezeigt wird. Offensichtlich nimmt find nur first und second als Zeiger, wobei first der Wert und second der entsprechende Wert ist. Gibt es einen Weg, dies zu tun?

3voto

bobah Punkte 17484

Die Operation, die du benötigst, heißt equal_range

Beispiel von cplusplus.com:

// unordered_multimap::equal_range
#include 
#include 
#include 
#include 

typedef std::unordered_multimap stringmap;

int main ()
{
  stringmap myumm = {
     {"orange","FL"},
     {"strawberry","LA"},
     {"strawberry","OK"},
     {"pumpkin","NH"}
  };

  std::cout << "Einträge mit strawberry:";
  auto range = myumm.equal_range("strawberry");
  for_each (
    range.first,
    range.second,
    [](stringmap::value_type& x){std::cout << " " << x.second;}
  );

  return 0;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X