Программируем с GPT
Мне
Нужно было переписать вот такой код с «Пайтона» на «Си++»:
{72: 65, 80: 66}.get(value, 0)Что тут происходит? Если value равно 72, вернуть 65, если 80, то 66, иначе ноль. Нужно мне это, если вкратце, для преобразования виндовых кодов в линуксовые.
Так как Си++ я не знаю, описал на Пайтоне — так быстрее и проще показать, что код мне нужен компактный — хочется не городить switch, а добавлять новое правило как можно проще.
Вот что мне сгенерировал
int value = 72;
std::map<int, int> mymap = {{72, 65}, {80, 66}};
int result = mymap.count(value) ? mymap[value] : 0;После консультации с живыми людьми, выяснилось, что плохо тут примерно всё.
В итоге, код стал выглядеть следующим образом:
const static std::unordered_map<int, int> win2lin = {{72, 65}, {80, 66}};
auto it = win2lin.find(_getch());
ch = it == win2lin.end() ? 0 : it->second;
Комментарии 10
Вот, компилятор прекрасно справляется вообще убрать все циклы и заменить их просто на пару сравнений: https://godbolt.org/z/8sW8xc7e8
А вот как выглядит то же самое на unordered_map: https://godbolt.org/z/TWcq6ooeb
Но заставить Chat 3.5 написать вместо map
P. S. Код исправил на ваш.
Я не уверен, но вроде в Питоне тоже каждый раз словарь будет создаваться.
Но хороший программист на Си++ так это точно не оставит.