Страницы

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

пятница, 26 апреля 2019 г.

Создать map на C++

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


Ответ

Например, можно объявить следующим образом
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;

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

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