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
提交
取消