亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1461 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號