c++模板 map的value排序

版权声明:本文为博主原创文章,转载请注明原文地址: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

猜你喜欢

转载自blog.csdn.net/helloworld_ptt/article/details/81172356