我跟着this answer并写下了代码。但它给出了以下编译错误。我认为这是因为make_pair不能接受另一个make_pair作为参数。那么替代方案是什么?
error: no matching function for call to ‘std::map<std::basic_string<char>, std::map<float, int>
>::insert(std::pair<std::basic_string<char>, std::pair<double, int> >)’
下面的代码
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, std::map<float, int> > map1;
std::string string1 = "alpha";
map1.insert(std::make_pair(string1, std::make_pair(1.1, 1)));
return 0;
}
答案 0 :(得分:2)
您使用非地图的内容初始化“对”的后半部分。
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, std::map<float, int> > map1;
std::string string1 = "alpha";
std::map<float,int> mapsub;
mapsub.insert(std::make_pair(1.1, 1));
map1.insert(std::make_pair(string1, mapsub));
return 0;
}
或者:
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, std::map<float, int> > map1;
std::string string1 = "alpha";
map1.insert(std::make_pair(string1, std::map<float,int>{std::make_pair(1.1,1)}));
return 0;
}
答案 1 :(得分:2)
或者,您可以按如下方式使用[]
运算符:
map1[string1][1.1] = 1;