Обсуждение:Полезные заметки/Список языков программирования
Перейти к навигации
Перейти к поиску
« | Давайте пока не писать:
|
» |
— Mercury13 |
произведение может быть историческое (Idot (обс.) 18:46, 15 октября 2024 (MSK))
- А одна строчка, и та в орфоошибках — стоит? --Mercury13 (обс.) 03:46, 16 октября 2024 (MSK)
- А про Rust — меня смешит вообще ссылка, когда пуританин Rust хочет неизменяемых данных в игровом-то движке, который по определению устроен так, что чьё-то состояние меняется. --Mercury13 (обс.) 04:27, 16 октября 2024 (MSK)
1) "Неизменный словарь" в C++ это что? std::map уже сделали constexpr? 2) "Сложно, но можно добавить к нему структуры для быстрого поиска" это что? Велосипедится оно как бэ, достаточно просто. 3) Велосипедится на constexpr. Я не особо понял, почему его нужно убирать из статьи.
template<typename T,typename...Args> constexpr auto generateDict(const T&compare,Args&&...args) { std::array dict{args...}; std::sort(dict.begin(),dict.end(),compare); return dict; } constexpr bool compare(const char*a,const char*b){ return std::char_traits<char>::compare(a, b, std::min(std::char_traits<char>::length(a)+1,std::char_traits<char>::length(b)+1))<0; } int main() { //constinit гарантирует что все будет вычислено на стадии компиляции static constinit auto dict=generateDict( [](auto a,auto b){return compare(a.first,b.first);}, std::pair<const char*,int>{"one",1}, std::pair<const char*,int>{"two",2}, std::pair<const char*,int>{"three",3}, std::pair<const char*,int>{"zero",0}); std::cout<<std::lower_bound(dict.begin(),dict.end(),"three",[](auto a,auto b){return compare(a.first,b);})->second<<std::endl; return 0; }
Kuudere Lover (обс.) 16:52, 19 октября 2024 (MSK)