Probleme mit sort, map und string oO
-
Hallo,
ich habe <string> (oO), <algorithm> (OO), <map> (OO''') eingebunden.
Nun, habe ich einen std::map<std::string, std::string> (hehe)...
... und möchte den mit der Sortierfunktion sortieren X'DSo, und jetzt habe ich fehler.
Ich denke, ihr könnt euch jetzt schon vorstellen, wie es aussieht.
Ne, also ernsthaft, ich habe 23 Fehler und 5 Warnungen und werde leider nicht schlau aus den Selben, ich habe sie mal in ein Codepaste gehauen:
...
ich habs probiert, leider zu groß für die Coepastes.
Also ich möchte halt eine map mit eigenem Funktor, den ich übergebe, sortieren, also wie üblich, geht das denn, wenn ja, wie?
MfG MaV
-
maps sind schon sortiert. was willst du sortieren?
außerdem kannst du deiner map ein drittes templateargument übergeben (als sortierkriterium)
-
Hallo,
ich habe es so versucht, nachdem mir Bashar geholfen hat:
struct compLen { bool operator()(const std::string& a, const std::string& b) { return a.length() < b.length(); } }; typedef std::map<std::string, std::string, compLen> varMap;
Ich nutze die Definition varMap überall, leider wirkt es sich nicht aus.
Wenn ich drei Strings einfüge <"kx", "100"> <"aox", "200"> <"ö", "300"> dann sortiert er leider nicht so, wie ich es will, also mit > statt < als Vergleichsoperator ist es nicht das Problem, weil kx ja in der Mitte liegen müsste, und ö ganz vorne oder hinten und aox auch wieder ganz vorne oder hitnen.
Leider, wenn ich mit iterator durchlaufe, hat er die Elemente stets in der Reihenfolge, in der ich sie eingefügt habe.MfG MAV
-
Zu viel der Ehre, der Vergleichsfunktor ist von schnitzl.
-
Mis2com schrieb:
Ne, also ernsthaft, ich habe 23 Fehler und 5 Warnungen und werde leider nicht schlau aus den Selben, ich habe sie mal in ein Codepaste gehauen
Das schon probiert?
-
nman: Danke
Ich habe jetzt ein andrees Problem, ich habe den Funktor also verwendet, aber leider sortiert er überhaupt nicht!
Weder das Längste noch das Kürzeste geht als Erstes, sondern stets nachEinfügereihenfolge
Was soll ich tun?
MfG MAV
-
Zeig mal einen Code der Dein Problem verdeutlicht.
MfG Jester
-
hallo,
also hier ist der Code:
struct compLen { bool operator()(const std::string& a, const std::string& b) { return a.length() < b.length(); } }; typedef std::map<std::string, std::string, compLen> varMap;
Instanziere ich die Map, klappt es nicht so, wie ich will.
Hier Beispieleingaben:"xy", "200"
"xyz", "100"
"z", "400"Laufe ich mit iterator durch, so sehe ich als Erstes xy und nicht z oder xyz, wie es sein sollte.
MfG mAV
-
Also bei mir funktioniert's wunderbar. Zeig mal den Code wo Du damit arbeitest.
Nebenbei welchen Compiler + welche STL benutzt Du?MfG Jester
-
VC++ 6.0 Prof. Ohne Fixes und Standard-STL davon.
Übrigens:
Bei dem Link, den du mir gabst, habe ich eine ZIP für VC runtergeladen, aber was soll ich damit jetzt bitte machen?Einfügen:
m_vars[left] = strstr.str();
Durchlaufen:
via Iterator: for(varMap::iterator it; it != m_sMap.end(); ++it) { ... }
MfG MAV
-
Mis2com schrieb:
Übrigens:
Bei dem Link, den du mir gabst, habe ich eine ZIP für VC runtergeladen, aber was soll ich damit jetzt bitte machen?öhm, ich kann mich nicht dran erinnern Dir nen Link gegeben zu haben...
-
Stimmt, nman wars...
Sag mal, was soll ich denn jetzt tun in meiner verzweifelten Lage?
-
Compiler updaten und STL fixen oder STLPort ziehen?
Damit hat's bei mir funktioniert.Wäre
for(varMap::iterator it = [b]m.begin()[/h]; it != m_sMap.end(); ++it)
nicht besser? Aber wahrscheinlich hast Du das eh im Code, weil sonst nämlich garnix funktionieren sollte.
MfG Jester
-
Äh richtig.
STLPort... Okay, ist das schwer einzurichten?
-
Wo ist jetzt eigentlich dein Problem? Dieser Thread ist sehr undurchsichtig.
-
nö eigentlich nicht.
Einfach runterladen, entpacken. Dann ist dann eine Readme dabei, da steht alles. Im Prinzip muß man nur zu den Makefiles, vc6.mak umbennen in makefile und dann
make clean
und anschließend
make install
eingeben.Das war's!
Eigentlich steht's doch ziemlich genau da. Er versucht ein eigenes Sortierkriterium für die strings anzugeben, aber da wird leider nicht richtig berücksichtig.
MfG Jester
-
um nicht weiter zu verwirren, dort geht's weiter: http://www.c-plusplus.net/forum/viewtopic.php?t=55299
hier ist zu
nächstes mal nur einen thread für eine frage aufmachen/offen lassen