C++ 访问地图内部的元素<;int,字符串[4]>;

C++ 访问地图内部的元素<;int,字符串[4]>;,c++,gcc,stl,map,std,C++,Gcc,Stl,Map,Std,如何从以下映射访问元素: map<int, string[4]> * my_map; 最近,我发现这是我的编译器的一个非标准特性,正确的方法是通过操作符[]。不幸的是,编译器一直试图将我的密钥转换为字符串[4]: string * val_ptr = my_map->operator[](key); error: conversion from ‘int’ to non-scalar type ‘std::string [4]’ requested 我在网上看过,但似乎没

如何从以下映射访问元素:

map<int, string[4]> * my_map;
最近,我发现这是我的编译器的一个非标准特性,正确的方法是通过
操作符[]
。不幸的是,编译器一直试图将我的密钥转换为
字符串[4]

string * val_ptr = my_map->operator[](key);

error: conversion from ‘int’ to non-scalar type ‘std::string [4]’ requested
我在网上看过,但似乎没有任何字符串数组映射的例子。我在做一些无效的事情吗?我应该改为使用向量吗?如果是的话,它的创建和访问速度会变慢吗

使用
.at()。它在标准C+11中(参见)

现在这个,

string * val_ptr = my_map->operator[](key);
这是正确的,但应写为:

string * val_ptr = (*my_map)[key];
因为它更简洁

至于编译器错误,它在其他地方


事实上,我相信,问题来自某个地方,是由映射的指针声明引起的。为什么不将地图声明为:

map<int, string[4]> my_map; //no pointer

如果您使用
std::vector
,效果会更好:

std::map<int, std::vector<std::string> > my_map; //no pointer
std::map my\u map//无指针
然后使用

string * val_ptr = my_map[key]; 
std::vector<std::string> & val = my_map[key]; 
std::vector&val=my_map[key];
使用
.at()
函数不再是非标准的。它在标准C+11中(参见)

现在这个,

string * val_ptr = my_map->operator[](key);
这是正确的,但应写为:

string * val_ptr = (*my_map)[key];
因为它更简洁

至于编译器错误,它在其他地方


事实上,我相信,问题来自某个地方,是由映射的指针声明引起的。为什么不将地图声明为:

map<int, string[4]> my_map; //no pointer

如果您使用
std::vector
,效果会更好:

std::map<int, std::vector<std::string> > my_map; //no pointer
std::map my\u map//无指针
然后使用

string * val_ptr = my_map[key]; 
std::vector<std::string> & val = my_map[key]; 
std::vector&val=my_map[key];

您可以使用
std::map
(或者拥有自己的
class fourstring\u t
包含四个字符串)并使用
std::map
,您还可以使用

 string second = (my_map->at(key))[1];
检索字符串数组中的第二个字符串(秩1)

正如纳瓦兹提醒的那样,at方法是标准的


正如UncleBens所提醒的,您需要
fourstring\u t
类型才能分配。

您可以使用
std::map
(或者拥有自己的
class fourstring\u t
包含四个字符串),使用
std::map
,也可以使用

 string second = (my_map->at(key))[1];
检索字符串数组中的第二个字符串(秩1)

正如纳瓦兹提醒的那样,at方法是标准的


正如UncleBens所提醒的,您需要
fourstring\u t
类型是可分配的。

从什么时候开始
map
甚至是合法的<代码>字符串[4]
或任何其他数组都是不可分配的。从什么时候开始
映射
甚至是合法的
string[4]
或任何其他数组都是不可分配的。我所说的非标准数组的意思是,这里没有列出它,我在讨论它时遇到的几篇在线帖子提到,这个函数只有gcc编译器的一些版本可用。@Pavel:我应该提到它在C++11中是标准的我所说的非标准的意思是,这里没有列出它,我在讨论它时遇到的几篇在线帖子中提到,该函数仅适用于某些版本的gcc编译器。@Pavel:我应该提到它在C++11中是标准的: