Comments 26
Вы делали сравнение с выборкой из БД? Если да, то с какой? Вы же понимаете, что просто создали кучу индексов на все нужные вам комбинации. А так же то, что всю БД вы держите в памяти. Поэтому, если выбрать in-memory БД, и создать так же много индексов, то, мне кажется, результат будет примерно таким же.
Мой преподаватель по СУБД только фыркал, когда я упоминал про SQLite.
Задача на собеседование или рабочий проект?
Ребятам из фотостраны придется сочинять новое тестовое задание =)
Есть более-менее стандартное решение в виде Boost Multi-index Конечно, если огромный бюст вас не пугает в проекте.
Еще есть boost::multi_index
Неплохо было бы выложить проект на github.
del
Если переделать BiCriterion таким образом, чтобы это была фабрика, то получится код на Java :)
А зачем вам AbstractCriterion? Обязать производные классы иметь этот интерфейс?
А как же високосные года? =)
class AgeCriterion: public AbstractCriterion { public: static const unsigned int SECONDS_IN_YEAR = 31536000; ...
Сдается мне, что ваше решение будет жутко расточительным по памяти. Дело в том что std::*set и std::*map очень активно используют кучу внутри себя.и из-за этого, относительно, медленно добавляют/удаляют такое большое количество элементов. Такое ощущение что у вас очень мощная 64-х битная операционка с большим количеством памяти. В 32-х битном процессе такая реализация легко может вызвать OutOfMemory.
Можно полюбопытствовать, сколько памяти занимает таким образом созданный индекс?
Можно полюбопытствовать, сколько памяти занимает таким образом созданный индекс?
Условие я заметил. Но тут все зависит от того, как его трактовать. Если база совсем редко изменяется, то выгоднее использовать 5-ть отсортированных std::vector-ов (четыре для индекса и один для самих структур). Будет занимать 200 + 160 = 360 Мб, Примерно в два раза меньше памяти. Ну а вообще, тут, конечно, самым оптимальным будет использование B+Tree. У него плотность будет сравнима с векторами, а скорость поиска с двоичным деревом.
Sign up to leave a comment.
Задачка на std::multiset или поиск по полям структуры