I want to define something like
Map myMap;
The above declaration is accepted by c++ compiler and no error is thrown bu
According to documentation pair can hold (and be defined for) distinct classes. C array is not a class, but a construct. You must define your own class with overloaded operator[]()
. Might need comparison operators as well
You cannot use an array in a standard container.
Use an std::vector
instead of an array
Use a map of pointers to arrays of 5 elements.
Use boost tuples instead of arrays of 5 elements.
Instead of using an array make a new struct
that takes 3 elements. Make the map<int, newstructtype>
. Or wrap your array in a struct
and that will work too.
\
struct ArrayMap
{
int color[5];
};
/
One way is to wrap the fixed size character array as a struct.
struct FiveChar
{
FiveChar(char in[5]) { memcpy(data, in, 5); }
char& operator[](unsigned int idx) { return data[idx]; }
char data[5];
};
int main(void)
{
char arr[5] = "sdf";
map<int, FiveChar> myMap;
myMap.insert(pair<int, FiveChar>(0, arr));
return 0;
}
I understand your performance requirements (since I do similar things too), but using character arrays in that way is rather unsafe.
If you have access to C++11 you could use std::array. Then you could define your map like:
map <int, array<char, 5>> myMap;
If you cannot use C++11, then you could use boost::array.