Zeichen-Array als einen Wert in C++ anzeigen
Möchte ich definieren, so etwas wie
Map<int, char[5] > myMap;
Dem obigen Erklärung angenommen, die von der c++ - compiler und kein Fehler ausgegeben, aber wenn ich so etwas tun
int main()
{
char arr[5] ="sdf";
map <int, char[5]> myMap;
myMap.insert(pair<int, char[5]>(0,arr));
return 0;
}
Bekomme ich Fehler wie:
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
Ist es für mich wichtig, zu definieren, eine Feste Größe Zeichen-array, weil es optimiert die mein-Netzwerk-stream-Betrieb. Gibt es eine Möglichkeit, es zu erreichen? Ich will nicht zu verwenden char *
oder std::string
.
Sie haben versucht, die Definition einer
Warum nicht
ja, ich war in der Lage, es zu tun, indem Sie ein struct 🙂 Aber kannst du bitte erklären Sie mir, warum machen Sie es eine Struktur, die Arbeit und nicht der char[5] selbst ?
Sehen Sie, diese Frage Warum deklarieren Sie ein struct, das enthält nur ein array
Antworten sind toll, aber niemand diskutiert, warum so ein Konstrukt ist nicht möglich in c++, oder wenn c++ - compiler akzeptiert die Erklärung, wie es zu benutzen? Nur von einem theoretischen Standpunkt aus.
struct
enthält eine char[5]
?Warum nicht
char *
oder noch besser string
?ja, ich war in der Lage, es zu tun, indem Sie ein struct 🙂 Aber kannst du bitte erklären Sie mir, warum machen Sie es eine Struktur, die Arbeit und nicht der char[5] selbst ?
Sehen Sie, diese Frage Warum deklarieren Sie ein struct, das enthält nur ein array
Antworten sind toll, aber niemand diskutiert, warum so ein Konstrukt ist nicht möglich in c++, oder wenn c++ - compiler akzeptiert die Erklärung, wie es zu benutzen? Nur von einem theoretischen Standpunkt aus.
InformationsquelleAutor Master Oogway | 2012-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit ist, wickeln Sie die Feste Größe Zeichen-array als eine Struktur.
Wie zum abrufen der Daten ? Ich verwendete printf("%s\n", myMap[0].Daten) , aber es funktioniert nicht.
href="http://ideone.com/RiyDEb" >ideone.com/RiyDEb
InformationsquelleAutor timrau
Ich verstehe Ihre performance-Anforderungen (da habe ich ähnliche Dinge auch), aber die Verwendung von Zeichen-arrays auf diese Weise ist eher zu unsicher.
Wenn Sie Zugang zu C++11, die Sie nutzen könnten
std::array
. Dann könnten Sie Ihre Karte wie:Wenn Sie nicht verwenden, C++11, dann könnten Sie
boost::array
.Die beiden
>
sollte durch ein Leerzeichen getrennt. Andernfalls wird es behandelt, alsoperator>>
.Nicht mehr in C++11. Haben Sie einen Blick auf hier.
InformationsquelleAutor betabandido
Können Sie nicht verwenden ein array in einen standard-container.
Verwenden Sie ein
std::vector
anstelle einer array -Verwenden Sie eine Karte der Zeiger auf arrays mit 5 Elementen.
Verwenden boost-Tupel anstelle von arrays mit 5 Elementen.
Statt mit einem array machen, eine neue
struct
dauert 3 Elemente. Machen diemap<int, newstructtype>
. Oder wickeln Sie Ihre array in einestruct
und das wird auch funktionieren.\
/
InformationsquelleAutor
Laut Dokumentation paar halten kann (und definiert) unterschiedliche Klassen. C-array ist nicht eine Klasse, sondern ein Konstrukt. Sie müssen definieren Sie eine eigene Klasse mit überladenen
operator[]()
. Vielleicht müssen die Vergleichsoperatoren sowiekey_type
, nicht diemapped_type
Ja, in meinem Fall brauchte ich das char-array für die zugeordneten Typ, daher einfach, indem Sie ein struct, funktioniert es für mich. tyepdef struct { char arr[5]; } fixedArray; Das über struct bei mir funktioniert.
InformationsquelleAutor friendzis