在地图中传递三个参数显示错误

时间:2014-07-16 17:49:19

标签: c++ dictionary

我想在C ++中传递map中的三个参数。使用插入功能时显示错误。有没有替代方法呢?我想做一对((整数整数)字符串)

int main()
{
    map < map <int, int>, char[50] >  Code;

    int TestCases,Queries,a,b;
    char Name[50];
    scanf("%d",&TestCases);

    for (int i = 0; i < TestCases; i++)
    {
        scanf("%d %d %s",&a,&b,Name);
        Code.insert(make_pair(make_pair(a,b),Name[50]));// Error    Line 
    }
}

我收到以下错误:

  

C2664:&#39; void std :: _ Tree < std :: _ Tmap_traits < _ Kty,_Ty,_Pr,_Alloc,false >> :: insert(std :: initializer_list&lt ; const _Kty,_Ty >>)&#39; :无法转换参数1来自&#39; std :: pair < std :: pair < int,int >,char >&#39; to&#39; std :: pair < const _Kty,_Ty >

3 个答案:

答案 0 :(得分:2)

根据用法判断,看起来你真的希望密钥是一对int,而不是int到int的映射,如下所示:

std::map< std::pair<int,int>, char[50] > Code;

此外,如果要在地图中存储字符串,最好使用C ++字符串类而不是C字符数组。

std::map< std::pair<int,int>, std::string > Code;

答案 1 :(得分:0)

只需提供姓名&#39;指针,而不是数组索引的索引[50]。

Code.insert(make_pair(make_pair(a,b),Name));

也可能需要将您的地图声明更改为:

map < map <int, int>, char* >  Code;

但我对此并不乐观。

答案 2 :(得分:0)

  1. 更改

    map < map <int, int>, char[50] > Code;
    

    map <pair <int,int>, string > Code;
    

    这会将一对intstring与每个map相关联,这是我假设您想要的,而不是将整个string只与一对相关联与每个char[50]一起使用,这将是麻烦而且浪费。

  2. 将您的所有string更改为Code.insert(pair<pair<int,int>,string>(pair<int,int>(a,b),Name)); &#39}。他们会更好地为你服务。

  3. 将第11行(make_pair行)更改为:

    Code

    这将根据您的需要正确填写cout

  4. 另外,我建议使用cinscanf,而不是{{1}},这是一个C函数。他们也更宽容。