brauche hilfe zu STL-map...
-
hallo ich habe folgenden code (gekuerzt fuer veranschaulichung) und das problem
dass die find-member von map, wie sie in der STL-Doku aufgefuehrt ist, nicht das macht was es machen soll.#include<string> #include<map> using namespace std; class Artikel { public: Artikel(){} Artikel(string a):attr(a){}; string attr; }; struct oper {bool operator()(const string s1, const string s2) const{return (s1 == s2);}}; int main(int argc, char *argv[]) { Artikel artikel("irgendwas"); map<string, Artikel, oper> mapping; mapping["key"] = artikel; map<string, Artikel, oper>::iterator pos = mapping.find("key"); if(pos == mapping.end()) cout << "nicht gefunden" << endl; else{ cout << "gefunden" << endl; cout << (*pos).second.attr << endl; } return 0; }
obiges beispiel findet bei mir NICHT den eintrag.
warum nicht?vielen dank, gruss.
-
Eine map braucht zum funktionieren einen kleiner-als Operator. Deshalb solltest du deinen operator oper von == nach < ändern.
-
ok danke. nun gehts.
wo steht sowas eigentlich!?
in der STL-Doku habe ich sowas nicht gefunden.
zwar ein beispiel wo der operator auch < verwendete aber dass es mit nem == nicht funzt steht da nicht.danke,gruss.
-
http://www.sgi.com/tech/stl/Map.html
Da steht sowas wie:
The key comparison function, a Strict Weak Ordering whose argument type is key_type; it returns true if its first argument is less than its second argument, and false otherwise. This is also defined as map::key_compare.
-
peperony schrieb:
das problem
dass die find-member von map, wie sie in der STL-Doku aufgefuehrt ist, nicht das macht was es machen soll.Richtig. Funktionen machen derzeit noch nicht das was sie sollen, sondern das was spezifiziert bzw. implementiert ist. Aus diesem Grund sind nicht die Wünsche des Aufrufers entscheidend sondern vielmehr das was in der Dokumentation steht (bzw im Quellcode).
Konsequenz: Bis zum endgültigen Erscheinen des "Do-what-i-mean"-Operator bleibt ein gewissenhaftes Doku-Studium unumgänglich. Wenn deine STL-Dokumentation so grundlegende Dinge wie die Sortiereigenschaften einer Map verschweigt, dann wird es Zeit, dass du dich nach einer besseren Doku umschaust.
Btw: Um welche STL-Doku handelt es sich da?
-
Gibts denn den do_what_i_should_mean operator?