массив без знака в качестве ключа на карте (STL - C ++)

0

Есть некоторые сообщения, связанные с этим, но мне нужно что-то прояснить. У меня есть структура в моей программе, и одно из ее полей - массив фиксированного размера (16). Это приведенный пример указанной структуры:

my_struct{
     unsigned char my_field[16];
     ....
     // some more fields here
};

Я хочу использовать это поле в качестве ключа для карты, и вот мой вопрос. - Есть ли способ использовать такую карту, как

map<unsigned char[16], some_defined_structure>

? В противном случае, что было бы лучшим способом как-то скопировать этот массив символов, чтобы он соответствовал массиву или векторной структуре для последующего вставки на карту?

  • 0
    Если вы измените его на std::array<unsigned char, 16> это просто.
  • 0
    Вы хотите, чтобы сравнение ключей всегда включало все 16 беззнаковых символов (если это так, тогда std::array - это хорошо), или там есть какой-то разделитель? (для последнего вы можете, например, использовать std::array и пользовательскую функцию сравнения, или извлечь соответствующие символы в std::string )
Показать ещё 1 комментарий
Теги:
stl
map

1 ответ

5

unsigned char[16] не подходит для ключевой карты. он не соответствует требованиям. Но std::array<unsigned char,16> делает.

  • 0
    Да, я так и думал ... В таком случае, поскольку я не могу изменить исходную структуру, какой самый лучший и самый быстрый способ скопировать my_struct.my_field в переменную std :: array <unsigned char, 16>?
  • 1
    @estradjs использует std::copy(std::begin(my_obj.my_field), std::end(my_object.my_field), x.begin()) (где x - это std::array<unsigned char, 16> ) а затем скопируйте x в map .
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню