Tableau de caractères comme une valeur en C++ carte
Je veux définir quelque chose comme
Map<int, char[5] > myMap;
La déclaration ci-dessus est accepté par le compilateur c++ et aucune erreur n'est levée, mais quand je fais quelque chose comme ceci
int main()
{
char arr[5] ="sdf";
map <int, char[5]> myMap;
myMap.insert(pair<int, char[5]>(0,arr));
return 0;
}
J'obtiens l'erreur:
In file included from /usr/include/c++/4.6/bits/stl_algobase.h:65:0,
from /usr/include/c++/4.6/bits/char_traits.h:41,
from /usr/include/c++/4.6/ios:41,
from /usr/include/c++/4.6/ostream:40,
from /usr/include/c++/4.6/iostream:40,
from charMap.cpp:1:
/usr/include/c++/4.6/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = int, _T2 = char [5]]’:
charMap.cpp:9:42: instantiated from here
/usr/include/c++/4.6/bits/stl_pair.h:104:31: error: array used as initializer
/usr/include/c++/4.6/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = int, _U2 = char [5], _T1 = const int, _T2 = char [5]]’:
charMap.cpp:9:43: instantiated from here
/usr/include/c++/4.6/bits/stl_pair.h:109:39: error: array used as initializer
Il est important pour moi de définir une taille fixe tableau de caractères, car il optimise mon flux réseau de l'opération. Est-il possible de le réaliser? Je ne veux pas utiliser char *
ou std::string
.
Avez-vous essayé de définir un
Pourquoi ne pas
oui, j'ai été capable de le faire en faisant un struct 🙂 Mais pouvez-vous svp m'expliquer pourquoi en faire une structure de travail et non le char[5] lui-même ?
Voir cette question Pourquoi déclarer une structure qui contient uniquement un tableau
Les réponses sont grands, mais personne n'a dit pourquoi une telle construction n'est pas possible en c++, ou si le compilateur c++ accepte la déclaration, comment l'utiliser? Simplement à partir d'un point de vue théorique.
struct
qui contient un char[5]
?Pourquoi ne pas
char *
ou mieux encore string
?oui, j'ai été capable de le faire en faisant un struct 🙂 Mais pouvez-vous svp m'expliquer pourquoi en faire une structure de travail et non le char[5] lui-même ?
Voir cette question Pourquoi déclarer une structure qui contient uniquement un tableau
Les réponses sont grands, mais personne n'a dit pourquoi une telle construction n'est pas possible en c++, ou si le compilateur c++ accepte la déclaration, comment l'utiliser? Simplement à partir d'un point de vue théorique.
OriginalL'auteur Master Oogway | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
Une façon est d'envelopper le tableau de caractères de taille fixe comme un struct.
Comment récupérer les données ? J'ai utilisé printf("%s\n", myMap[0].de données) , mais il ne fonctionne pas.
href="http://ideone.com/RiyDEb" >ideone.com/RiyDEb
OriginalL'auteur timrau
Je comprends vos exigences de performances (depuis que je fais des choses semblables), mais en utilisant des tableaux de caractères de cette façon est plutôt dangereux.
Si vous avez accès à C++11 vous pouvez utiliser
std::array
. Ensuite, vous pouvez définir votre carte comme:Si vous ne pouvez pas utiliser le C++11, alors vous pouvez utiliser
boost::array
.Les deux
>
doivent être séparés par un caractère espace. Sinon, il est traité commeoperator>>
.Non en C++11. Jetez un oeil à ici.
OriginalL'auteur betabandido
Vous ne pouvez pas utiliser un tableau dans un conteneur standard.
Utiliser un
std::vector
au lieu d'un tableauL'utilisation d'une carte de pointeurs vers des tableaux de 5 éléments.
Utilisation stimuler les tuples au lieu des tableaux de 5 éléments.
Au lieu d'utiliser une matrice de faire une nouvelle
struct
qui prend 3 éléments. Faire de lamap<int, newstructtype>
. Ou de la pellicule de votre tableau dans unstruct
et qui sera trop de travail.\
/
OriginalL'auteur
Selon la documentation paire peut tenir (et être définis pour) classes distinctes. C tableau n'est pas une classe, mais une construction. Vous devez définir votre propre classe avec surchargé
operator[]()
. Pourriez avoir besoin des opérateurs de comparaison ainsikey_type
, pas lamapped_type
Oui, dans mon cas, j'avais besoin de la char tableau pour le mappé type, par conséquent, simplement en faisant une struct, ça fonctionne pour moi. tyepdef struct { char arr[5]; } fixedArray; au-dessus de La structure fonctionne pour moi.
OriginalL'auteur friendzis