std::map sortieren...
-
Hi,
das ist mein Code und mein Problem findet ihr unter dem Code:#include <iostream> #include <iomanip> #include <string> #include <algorithm> #include <map> typedef std::map<std::string, int> wordMap; int main() { wordMap words; std::string input = "Test, Test, Test, Test... Noch ein Test, loool, lol..."; std::string temp; for (int i = 0; i < input.length(); ++i) { if (isalpha(input[i])) { temp += input[i]; } else { if (!temp.empty()) { std::transform(temp.begin(), temp.end(), temp.begin(), tolower); words[temp] = ++((int)words[temp]); temp.clear(); } } } std::cout << "-- Result(s) --\n\n"; for (wordMap::iterator it = words.begin(); it != words.end(); ++it) { std::cout << (*it).first << std::setw(25-(*it).first.length()) << " = " << std::setw(25) << (*it).second << "\n"; } return 0; }Wie kann ich diese Map jetzt nach der Anzahl sortiert ausgeben? Danke im Voraus!
-
void sort( iterator start, iterator end, StrictWeakOrdering cmp );
-
Bringt mich nicht weiter...
-
Du könntest die Werte der Map in eine andere (vertauschte) Map eintragen:
std::map<int, std::list<std::string> >und dann diese Map (sowie die Liste) ausgeben.
Die Liste wird benötigt, da ja mehrere Strings dieselbe Anzahl aufweisen können.
-
Man könnte auch gleich eine std:: multimap verwenden, dann braucht man die std::list nichtmehr

Oder man stopft die Werte in einen std::vector rein, schreibt seinen eigenen Vergleichs-Funktor, und verwendet std::sort wie im 1. Beitrag schon vorgeschlagen wurde:
template <class P> struct compare_second { bool operator()(P const& a, P const& b) const { return a.second < b.second; } }; void foo() { std::map<std::string, int> m; // ... m anfüllen ... std::vector<std::pair<std::string, int> > v(m.begin(), m.end()); std::sort(v.begin(), v.end(), compare_second<std::pair<std::string, int> >()); // ausgeben, fertig. }