版权声明:本文为博主原创文章,转载请注明原文地址:http://blog.csdn.net/helloworld_ptt https://blog.csdn.net/helloworld_ptt/article/details/81172356
如需转载请注明出处 : https://blog.csdn.net/helloworld_ptt/article/details/81172356
程序只适用于元素为双整型的map
#include <map>
#include <iostream>
#include <algorithm>
#include <vector>
template<typename T1, typename T2>
void sortByValue(std::map<T1,T2>& test_map)
{
std::vector<std::pair<T1, T2>> vtMap;
for( const auto& iter : test_map)
{
vtMap.push_back(std::make_pair(iter.first, iter.second));
}
sort(vtMap.begin(), vtMap.end(), [](const std::pair<T1,T2>& x, const std::pair<T1,T2>& y) -> int {
return x.second < y.second;
});
test_map.clear();
int cnt = 1;
for( auto& item : vtMap)
{
test_map.insert(std::make_pair(cnt, item.second));
++cnt;
}
}
int main()
{
std::map<int, int> map1;
map1.insert(std::make_pair(1,4));
map1.insert(std::make_pair(2,3));
map1.insert(std::make_pair(3,2));
map1.insert(std::make_pair(4,1));
for(const auto& iter :map1)
{
std::cout<< iter.second <<std::endl;
}
sortByValue(map1);
for( const auto& iter : map1)
{
std::cout<< iter.second << std::endl;
}
return 0;
}
结果打印:
4
3
2
1
1
2
3
4