multimap und find aus <algorithm>
-
Das weiß ich (und das hab ich auch bereits geschrieben), aber WARUM ist die Zeile falsch?
-
#include <map> #include <algorithm> #include <utility> using namespace std; int main() { multimap<int, char> m; typedef multimap<int, char>::iterator IT; pair<int, char> pit; // <-- IT i; m.insert( make_pair( 1, 'a' ) ); m.insert( make_pair( 5, 'k' ) ); m.insert( make_pair( 5, 'l' ) ); pit = m.equal_range( 5 ); i = find( pit.first, pit.second, make_pair( 5, 'l' ) ); m.erase( i ); return 0; }edit: wobei ich gerade keinen Compiler zur Hand habe
-
Dein Vorschlag ergibt keinen Sinn, weil equal_range ein pair aus zwei Iteratoren zurückliefert und nicht ein Element der (multi!)map.
-
Das Problem liegt daran, dass Du versuchtst ein std::pair<int, char> mit einem multimap<int, char>::iterator zu vergleichen und dazu ist kein == operator definiert.
-
nö, das problem liegt darin, dass
map<Key, T>::value_typenichtpair<Key T>, sondernpair<const Key, T>ist.d.h. die lösung sieht so aus:
i = find( pit.first, pit.second, make_pair<const int, char>(5, 'l')); //oder generell: i = find( pit.first, pit.second, make_pair<IT::value_type::first_type>(5, 'l'));
-
Tut mir leid aber das versteh ich nicht ganz. Warum muss find das pair<int, char> mit pit.first (oder pit.second) vergleichen? (Oder wird der Vergleich woanders ausgeführt, wobei das nicht wirklich Sinn macht, da der Code ohne "find" (und natürlich erase) wunderbar funktioniert.
-
(mein vorheriger post bezog sich auf gysi)
-
Danke, queer_boy!
-
Hm laut Fehlermeldung vergleichst du da irgendwas mit einem pair<const string*, unsigned int>
Bei deinem angegebenen Text kommt bei mir die gleiche Fehlermeldung, allerdings mit pair<const int, char>.
Auf folgende Weise hab ich das Problem beheben koennen:
pit = m.equal_range( 5 ); pair<const int,char> p = make_pair( 5, 'l' ); //NEU!!! i = find( pit.first, pit.second, p); //*Moegen die Goetter wissen, wieso der Compiler da mit dem const durcheinander kommt.
-
Ja, der "string" kommt daher, dass das verbuggte Xcode die Meldungen nicht immer aktualisiert... (ich vermisse linux)