ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
829559 Топик полностью
fk0, легенда (04.04.2018 12:58, просмотров: 27) ответил AlexG на А есть ли в C++ не слишком замороченный способ создать структуру данных, к элементам которой можно было бы обратиться как по номеру (аналогично массиву), так и по имени? Вопрос возник из такой ситуации:
Да можно, написать operator[] в котором switch-case выбирает именованное поле по номеру. Если отказаться от структур, то может быть станет проще. Потому, что в языке нет нормальных средств работы со структурами (нельзя итерироваться по полям, например). Да и вообще структуры зло, лучше и проще разложить в плоские таблицы, как делают с базами данных. Т.е. вместо массива структур, например, делается определённое число таблиц, по числу элементов структуры. В каждой таблице хранится только ключ и один тип данных, соответствующий элементу структуры для которой создана таблица. Число строк в каждой таблице одинаково и соответствует числу ключей и размерности оригинального массива структур. Ключ -- это индекс в изначальном массиве структур. google://нормальная форма БД. Такие таблицы можно сделать на C++-контейнерах, на map в общем случае, и даже на векторе если ключ -- целочисленный индекс (только вставка медленная, но у тебя она и была). Ну а уж сами таблицы-контейнеры можно именовать и нумеровать отдельно как угодно. Только глядя на третий пункт я понимаю, что всё это дело небось ещё и сохранять надо (сериализовывать), так что незачем голову морочиь, проще и лучше взять готовую БД. Можно BerkeleyDB (там как раз возможны только отношения ключ-значение), но в ней с транзакциями как-то сложно. Можно простенькую SQL типа SQLite или Interbase (Firebird). Тем более, если там вырисовывается целый программный комплекс, то взаимодействовать он может через общий для всех сервер БД. Альтернатива -- делать самодельный application server, в целом сложней наверное.
[ZX]