В настоящее время я работаю над проектом, где я должен читать текстовый файл словом и вставлять каждое слово в карту STL, где ключ - это слово, а значение - это номер раз слово появилось. Этот раздел проблемы имеет смысл для меня (я заполняю вектор каждым словом, а затем перебираю вектор и вставляю каждое слово в карту и в зависимости от того, его уже на карте вставляю).Сортировка карты по значениям, а не ключам
Следующая часть проблемы затем просит меня распечатать гистограмму по порядку, отсортированную по счету слов. Если вы посмотрите на мой код ниже, я использую sMap.begin() и sMap.end() (я знаю, что sMap.rbegin и rend вернут список). В настоящее время карта сортирует мои ключевые значения. Есть ли простой способ заставить мою карту сортировать по значениям или мне нужно будет сделать какое-то копирование карты?
int main(){
using namespace std;
char* filename = "dracula.txt";
ifstream in(filename);
vector<string> contents;
string tempWord;
map<string, int> sMap;
while(in>>tempWord)
contents.push_back(tempWord);
// now we have a vector with every word
int i =0;
for(i;i<contents.size();i++){
// insert into the STL Map
map<string,int>::iterator it = sMap.find(contents[i]);
if(it==sMap.end()){
// we just need to insert the element with an occurence of 1
sMap.insert(map<string,int>::value_type(contents[i],1));
}else{
int temp = it->second;
sMap.erase (it);
sMap.insert(map<string,int>::value_type(contents[i],temp+1));
}
}
// now we have a filled map with all the words in the file
// we just need to sort the map based on the occurences
map<string,int>::iterator rit;
for(rit=sMap.begin(); rit != sMap.end();rit++){
cout << rit->first << ": ";
for(int q = rit->second; q>0; q--){
cout << "|";
}
cout << endl;
}
return EXIT_SUCCESS;
}
Пожалуйста, проверьте [этот ответ] (http://stackoverflow.com/questions/2699060/stl-map-sort-by-value). – dasblinkenlight
Возможный дубликат [Сортировка std :: map по значению перед выходом и уничтожением] (http://stackoverflow.com/questions/1367429/sorting-a-stdmap-by-value-before-output-destroy) –