STL中map按值(value)排序


分类:
C/C++


912人阅读
评论(0)
收藏
举报

文中的部分内容参考自互联网,感谢作者。

map默认是按照键(key)排序的。很多时候我们需要按值(value)排序,靠map里的

算法当然是不行的,那么可以把它转存到vector中,在对vector按照一定的规则排序即可。

[cpp:showcolumns] view plaincopyprint?

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. //示例代码:输入单词,统计单词出现次数并按照单词出现次数从多到少排序
  2. #include<cstdlib>
  3. #include<map>
  4. #include<vector>
  5. #include<string>
  6. #include<algorithm>
  7. #include<iostream>
  8. voidsortMapByValue(std::map<std::string,int>&tMap,std::vector<std::pair<std::string,int>>&tVector);
  9. intcmp(conststd::pair<std::string,int>&x,conststd::pair<std::string,int>&y);
  10. intmain()
  11. {
  12. std::map<std::string,int>tMap;
  13. std::stringword;
  14. while(std::cin>>word)
  15. {
  16. std::pair<std::map<std::string,int>::iterator,bool>ret=tMap.insert(std::make_pair(word,1));
  17. if(!ret.second)
  18. ++ret.first->second;
  19. }
  20. std::vector<std::pair<std::string,int>>tVector;
  21. sortMapByValue(tMap,tVector);
  22. for(inti=0;i<tVector.size();i++)
  23. {
  24. std::cout<<tVector[i].first<<":"<<tVector[i].second<<std::endl;
  25. }
  26. system("pause");
  27. return0;
  28. }
  29. intcmp(conststd::pair<std::string,int>&x,conststd::pair<std::string,int>&y)
  30. {
  31. returnx.second>y.second;
  32. }
  33. voidsortMapByValue(std::map<std::string,int>&tMap,std::vector<std::pair<std::string,int>>&tVector)
  34. {
  35. for(std::map<std::string,int>::iteratorcurr=tMap.begin();curr!=tMap.end();curr++)
  36. {
  37. tVector.push_back(std::make_pair(curr->first,curr->second));
  38. }
  39. std::sort(tVector.begin(),tVector.end(),cmp);
  40. }
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。