Character Array as a value in C++ map

后端 未结 4 1232
一个人的身影
一个人的身影 2021-01-05 13:38

I want to define something like

Map myMap;

The above declaration is accepted by c++ compiler and no error is thrown bu

相关标签:
4条回答
  • 2021-01-05 14:25

    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

    0 讨论(0)
  • 2021-01-05 14:31

    You cannot use an array in a standard container.

    1. Use an std::vector instead of an array

    2. Use a map of pointers to arrays of 5 elements.

    3. Use boost tuples instead of arrays of 5 elements.

    4. 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];
    };
    

    /

    0 讨论(0)
  • 2021-01-05 14:36

    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;
    }
    
    0 讨论(0)
  • 2021-01-05 14:39

    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.

    0 讨论(0)
提交回复
热议问题