Ich habe heute Morgen einen Algorithmus geschrieben und bin in eine seltsame Situation geraten. Ich habe zwei std::map
s. Ich möchte einen Satz Schnittpunkt auf den Mengen der Schlüssel von jedem durchführen (um herauszufinden, welche Schlüssel für beide Karten gemeinsam sind). Irgendwann in der Zukunft denke ich, dass ich wahrscheinlich auch hier die Subtraktion durchführen will. Glücklicherweise enthält die AWL Funktionen für beide Operationen. Das Problem ist, ich kann nicht scheinen std::set
der Schlüssel aus einer std::map
. Gibt es eine Möglichkeit, dies zu tun? Ich bin auf der Suche nach etwas, das so einfach sein würde, wie es in Java ist:Wie bekomme ich einen std :: Schlüsselsatz zu einer std :: map?
std::set<Foo> keys = myMap.getKeySet();
Mein Verständnis ist, dass ich nicht die std::set_intersection()
Funktion direkt auf Iteratoren in die Karten verwenden kann, weil die Karten std::pair
Objekte belichten statt von nur Schlüsseln. Außerdem glaube ich nicht, dass die Karte Ordnung garantiert. Ich bin auch daran interessiert, dieselbe Operation an einem Paar von std::multimap
s durchzuführen, wenn das einen Unterschied macht.
EDIT: Ich habe vergessen zu erwähnen, dass aufgrund des Alters des Compilers ich gezwungen bin zu verwenden (MSVC++ 6), die meisten der raffinierten Vorlagentricks, die in Boost verfügbar sind, können nicht verwendet werden.
Seien Sie nicht so schnell auf MSVC++ 6 aufgeben - siehe diese Frage http://StackOverflow.com/Questions/252492/Whats-the-Latest-Version-of-Boost-Compatible-With-VC6 –
Karte hält Keys in Reihenfolge –