如何在 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;
}
}
#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;
}
}