Multimap nicht Sortieren
Habe ich diese multimap gebaut, um die Karte der hamming-Abstand einer Zeichenkette die entsprechende Zeichenkette.
Da der hamming-Abstand zweier strings können gleich sein, ich will, dass Sie in aufsteigender Reihenfolge sortiert werden. Jedoch wenn ich drucken Sie es aus, es ist nicht sortiert. Die hamdistArray ist deklariert als unsigned-Typ.
typedef multimap<unsigned, string, less<unsigned> > Check;
Check pairs;
pairs.insert(Check::value_type(hamdistArray[j], d.sortedWordDatabase[j]));
for(Check::const_iterator iter = pairs.begin(); iter != pairs.end(); ++iter)
{
cout << iter->first << '\t' << iter->second<< endl;
}
Check
ist ein dummer name für diese Art.- Ich sehe nicht, wie deine gepostete code ist ein Testfall, wie Sie nur einfügen einen Wert.
- Geret'kal Der code innerhalb einer for-Schleife, daher das "j". Überprüfen Sie gewählt wurde, weil es behebt ein string basiert auf, wie nahe seine hamming-Distanz ist, aus einer Datenbank.
- Geben Sie bitte auch die Schleife in Ihrem Testfall.
Check
ist eine dumme Namen: der Typ keine richtige nichts, es ist ein geben, nicht ein Verfahren. Es ist der name einer Art von Datenspeicherung, nicht ein Algorithmus, der mutiert Daten. - Geret'kal: ich Schätze Ihre Einsicht. Könnte es nicht Sinn machen, um Ihnen die Namen, die ich ausgesucht habe für diese Art. Ich hoffe, es wird nicht behindern Ihre Fähigkeit zu helfen, mir meine Frage beantworten obwohl. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Elemente in einer multimap sind sortiert nach dem Schlüssel (in diesem Fall unsigned hamming-Distanz). Elemente mit dem gleichen Schlüssel sind nicht sortiert nach dem Wert (in diesem Fall die saite), Sie sind in der Regel gehalten, in der Reihenfolge, in der Sie eingegeben wurden.
Dies ist nicht möglich, mit
std::multimap
ist, denn wenn die Schlüssel verglichen werden, es ist nicht bekannt, welchen Wert Sie darstellen.multimap
nur sortiert nach Ihrem Schlüssel (Länge) nicht auch durch einen Wert (string). In diesem Fall vermute ich, dass Ihre beste Ansatz ist einestd::map<unsigned, std::set<std::string> >
. Sie können auch einstd::set<std::pair<unsigned, std::string> >
aber auf der Suche erfordern würde, Sie zu konstruieren dummypair
s suchen.Je weniger template-Funktion ist nicht notwendig, da es die Standardeinstellung ist. Versuchen Sie, die Deklaration zu Überprüfen, ohne als:
Bearbeitet werden: Der beste Weg, dies zu tun ist, zum generieren eines hash-Schlüssel wie die *key_type* und als die Wert-Typ könnte ein
std::pair<unsigned, string>