Думали ли вы об использовании хэш-таблицы? ... У вас может быть пара разных хеш-таблиц, каждая из которых хранит указатель на нужную запись в куче, а указатели хешируются в каждой таблице в соответствии с данными, которые вы хотите запросить. Это даст вам постоянную сложность (т. Е. O (1)) для каждого поиска.
Так, например, вы должны создать одну запись в куче и получить указатель на эту запись. Тогда, если вас интересует дата или имя в записи, есть две хеш-таблицы, одна для даты и одна для имен. Примените хеш-функцию к записи для имени и сохраните указатель на эту запись в соответствующем слоте таблицы на основе результата хеш-функции. Затем сделайте то же самое для даты в отдельной хеш-таблице, в которой хранятся указатели на исходную запись, но хэшируются в соответствии с полем даты. Затем вы должны получить очень быстрый поиск. Вставки также должны быть очень быстрыми, так как ваши хеш-функции также должны выполняться в постоянное время (при условии, что у вас достаточно большая хеш-таблица).
Если вы не заинтересованы в том, чтобы создать его самостоятельно, вы можете получить хеш-таблицу в c ++ 0x, используя std::unordered_map
. В противном случае вы можете сделать базовую упаковку класса с функциями вставки и т. Д., Используя std::vector<std::list<RECORD_TYPE*> >
в качестве базового контейнера (сначала измените его размер до соответствующего размера, прежде чем использовать его ... желательно, чтобы простое число было больше, чем количество записей, которые вы '' повторно планирую вставить).
Надеюсь, это поможет,
Jason