STL中map按值(value)排序
分类:
C/C++
2010-11-06 14:45
912人阅读
评论(0)
收藏
举报
文中的部分内容参考自互联网,感谢作者。
map默认是按照键(key)排序的。很多时候我们需要按值(value)排序,靠map里的
算法当然是不行的,那么可以把它转存到vector中,在对vector按照一定的规则排序即可。
- //示例代码:输入单词,统计单词出现次数并按照单词出现次数从多到少排序
- #include<cstdlib>
- #include<map>
- #include<vector>
- #include<string>
- #include<algorithm>
- #include<iostream>
- voidsortMapByValue(std::map<std::string,int>&tMap,std::vector<std::pair<std::string,int>>&tVector);
- intcmp(conststd::pair<std::string,int>&x,conststd::pair<std::string,int>&y);
- intmain()
- {
- std::map<std::string,int>tMap;
- std::stringword;
- while(std::cin>>word)
- {
- std::pair<std::map<std::string,int>::iterator,bool>ret=tMap.insert(std::make_pair(word,1));
- if(!ret.second)
- ++ret.first->second;
- }
- std::vector<std::pair<std::string,int>>tVector;
- sortMapByValue(tMap,tVector);
- for(inti=0;i<tVector.size();i++)
- {
- std::cout<<tVector[i].first<<":"<<tVector[i].second<<std::endl;
- }
- system("pause");
- return0;
- }
- intcmp(conststd::pair<std::string,int>&x,conststd::pair<std::string,int>&y)
- {
- returnx.second>y.second;
- }
- voidsortMapByValue(std::map<std::string,int>&tMap,std::vector<std::pair<std::string,int>>&tVector)
- {
- for(std::map<std::string,int>::iteratorcurr=tMap.begin();curr!=tMap.end();curr++)
- {
- tVector.push_back(std::make_pair(curr->first,curr->second));
- }
- std::sort(tVector.begin(),tVector.end(),cmp);
- }