猿问

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

multimap<int, int> nums;
for(;;)
{
    nums.insert(pair<int,int>(i++,abs(value-*iter)));  //pair<键,值>
}

我想根据值大小排序然后输出键的数值可以吗?

我在primer plus里没查到关于map排序的函数?

Helenr
浏览 1442回答 3
3回答

芜湖不芜

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

叮当猫咪

将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; }
随时随地看视频慕课网APP

相关分类

Java
我要回答