使用键和值对多重映射进行排序

Cha*_*aks 3 c++ sorting algorithm dictionary multimap

我正在尝试使用标准排序函数通过为其编写比较函数来对其中包含一组对的多重映射进行排序,但我在其中遇到了一些错误。我正在尝试使用值对地图进行排序,然后再次使用键对其进行排序。比较函数导致一些错误。你能指出我哪里错了吗?

#include <iostream>
#include <algorithm>
#include <map>

using namespace std;

bool cmp(const pair<int,int>& a, const pair<int,int>& b)
{
    return a.second < b.second;
}

int main() {
    // multimap of int ssId, int phone numbers
    multimap <int, int> m;
    m.insert(make_pair(1, 8));
    m.insert(make_pair(1, 5));
    m.insert(make_pair(2, 4));
    m.insert(make_pair(2, 3));
    m.insert(make_pair(3, 1));

    sort(m.begin(), m.end(), cmp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

1 5
1 8
2 3 
2 4
3 1
Run Code Online (Sandbox Code Playgroud)

psy*_*brg 5

在 C++ 中没有直接的方法可以做到这一点,因为多重映射是有序的,其顺序无法更改,但有一个使用额外多重映射的解决方法。它会准确地输出你想要的内容。类似的方法适用于字符串到整数,反之亦然的多重映射。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    multimap <int, int> m;
    m.insert(make_pair(1, 8));
    m.insert(make_pair(1, 5));
    m.insert(make_pair(2, 4));
    m.insert(make_pair(2, 3));
    m.insert(make_pair(3, 1));
    multimap<int, int> R;
    for (auto i=m.begin(); i!=m.end(); i++)
        R.insert({i->second,i->first});
    m.clear();
    for (auto i=R.begin(); i!=R.end(); i++)
        m.insert({i->second,i->first});
    R.clear();
    for (auto i=m.begin(); i!=m.end(); i++)
        cout<<i->first<<"\t"<<i->second<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)