std :: map插入另一个地图

时间:2013-11-28 07:18:34

标签: c++ map

我跟着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;
}

2 个答案:

答案 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;