我想在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>
答案 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)
更改
map < map <int, int>, char[50] > Code;
到
map <pair <int,int>, string > Code;
这会将一对int
&string
与每个map
相关联,这是我假设您想要的,而不是将整个string
只与一对相关联与每个char[50]
一起使用,这将是麻烦而且浪费。
将您的所有string
更改为Code.insert(pair<pair<int,int>,string>(pair<int,int>(a,b),Name));
&#39}。他们会更好地为你服务。
将第11行(make_pair行)更改为:
Code
这将根据您的需要正确填写cout
。
另外,我建议使用cin
和scanf
,而不是{{1}},这是一个C函数。他们也更宽容。