Обсуждение:Полезные заметки/Список языков программирования
Перейти к навигации
Перейти к поиску
| « |
Давайте пока не писать:
|
» |
— 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)