为了账号安全,请及时绑定邮箱和手机立即绑定

C++ multimap可以根据pair<>的值进行排序吗?

C++ multimap可以根据pair<>的值进行排序吗?

Helenr 2019-03-01 10:36:16
multimap<int, int> nums; for(;;) { nums.insert(pair<int,int>(i++,abs(value-*iter))); //pair<键,值> } 我想根据值大小排序然后输出键的数值可以吗? 我在primer plus里没查到关于map排序的函数?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

如果你是要从已有的 map 进行排序的话,可以把 map 的元素导入 vector<pair<>>,再用STL的排序算法进行排序

查看完整回答
反对 回复 2019-03-01
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

  • 将map的pair放进vector中,然后定义相应的排序准则即可排序。

#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;

//升序
bool Less(const pair<int, int>& lhs, const pair<int, int>& rhs)
{
    return lhs.second < rhs.second;
}

//降序
bool Greater(const pair<int, int>& lhs, const pair<int, int>& rhs)
{
    return lhs.second > rhs.second;
}

typedef    bool(*BinaryOper)(const pair<int, int>& lhs, const pair<int, int>& rhs);//定义函数指针

vector<pair<int,int>> SortByValue(const map<int, int> &input, BinaryOper op= Less)
{
    vector<pair<int, int>> res;
    for (auto &__pair : input)
    {
        res.push_back(__pair);
    }
    sort(res.begin(), res.end(), op);
    return res;
}

void display(const map<int, int> &input)
{
    for (auto &__pair : input)
    {
        cout << __pair.first << " " << __pair.second << endl;
    }
}

void display__(const vector<pair<int, int>>& input)
{
    for (auto &__pair : input)
    {
        cout << __pair.first << " " << __pair.second << endl;
    }
}

int main()
{
    map<int, int>input;
    input.insert(make_pair<int, int>(1, 1));
    input.insert(make_pair<int, int>(3, 2));
    input.insert(make_pair<int, int>(2, 2));
    input.insert(make_pair<int, int>(5, 3));
    input.insert(make_pair<int, int>(4, 4));
    display(input);
    cout << endl;
    //按升序排列
    display__(SortByValue(input, Less));
    cout << endl;

    ////按降序排列
    display__(SortByValue(input, Greater));
    cout << endl;
    
    system("pause");
    return 0;
}
查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 1441 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信