如何在 C++ 中为 multimap 实现以下函数 getValue(m)

How to implement the below function getValue(m) for multimap in C++

#include<bits/stdc++.h>
using namespace std;
void getValue(multimap<int,string> &m){
    for(auto &mValue : m){
        cout<<mValue.first<<" "<<mValue.second<<endl;
    }
}
int main(){
    int n;
    cin>>n;
    multimap<int,string> m;
    
    for(int i=0;i<n;i++){
        int num;
        string str;
        cin>>num;
        getline(cin,str);
        m.insert(make_pair(num,str));
    }
    

    getValue(m);
    return 0;
}

错误: 从类型为“std::multimap >”的表达式对类型为“std::map >&”的引用的初始化无效 getValue(m);

std::map<int, std::string>std::multimap<int, std::string> 是不同的类型,尽管它们有相似之处。

最简单的方法是编写类似的函数:

void getValue(const std::multimap<int, std::string> &m){
    for(auto &mValue : m){
        std::cout<<mValue.first<<" "<<mValue.second<<std::endl;
    }
}

但是 std 及以后有许多类似地图的容器,因此您可能希望将 getValue 更改为模板

template <typename Map>
void getValue(const Map &m){
    for(auto &mValue : m){
        std::cout<<mValue.first<<" "<<mValue.second<<std::endl;
    }
}

您可能希望将其限制为仅接受类似地图的类型,例如(C++17 的库添加 std::void_t

template <typename Map>
std::void_t<typename Map::key_type, typename Map::mapped_type> getValue(const Map &m){
    for(auto &mValue : m){
        std::cout<<mValue.first<<" "<<mValue.second<<std::endl;
    }
}