Страницы

Поиск по вопросам

суббота, 22 февраля 2020 г.

Создать map<char[2], long long> на C++

#cpp


Подскажите, пожалуйста, как правильно создать map.
    


Ответы

Ответ 1



Например, можно объявить следующим образом auto cmp = [](const char *a, const char *b) { return ::strcmp(a, b) < 0; }; std::map m(cmp); Однако, так как массивы не имеют оператора присваивания, то лучше объявить ключ, как имеющий тип std::array. Например, #include #include #include int main() { auto cmp = [](const std::array &a, const std::array &b ) { return ::strcmp(a.data(), b.data()) < 0; }; std::map, long long, decltype(cmp)> m(cmp); m.insert({ { { "A" }, 'A' }, { { "B" }, 'B' }, { { "C" }, 'C' } }); for (const auto &p : m) { std::cout << p.first.data() << ": " << p.second << std::endl; } } Вывод программы на консоль: A: 65 B: 66 C: 67 Если map содержит в качестве ключа строки, содержащие два символа помимо завершающего нуля, то нужно объявить ключ как std::array Можно упростить код если в качестве ключа использовать не символьный массив, а тип std::string. Тогда вы можете записать просто std::map m;

Комментариев нет:

Отправить комментарий