multimap<int, int> nums;
for(;;)
{
nums.insert(pair<int,int>(i++,abs(value-*iter))); //pair<鍵,值>
}
我想根據值大小排序然后輸出鍵的數值可以嗎?
我在primer plus里沒查到關于map排序的函數?
3 回答

叮當貓咪
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;
}
添加回答
舉報
0/150
提交
取消