Я собираюсь предложить более общий подход к работе с наборами запросов к базе данных на C / C ++.
Выполните запрос базы данных и поместите строки в массив структур. Если у вас недостаточно физической памяти, используйте файл с отображением памяти, который будет возвращать указатель на базу массива структур, которые MMU на плате процессора будет беспокоиться о том, чтобы при необходимости разместить его в памяти.
Теперь вы можете сортировать () этот массив структур по ключу / ключам, который даст вам доступ к ISAM, ересь в реляционной религии, но именно то, что дают вам курсоры. Это метод доступа к данным # 1
Теперь, если вам все еще нужно смотреть на эти данные по-другому, просто создайте 1 или более индексов / карт, где ключи карты являются подходящими (значение столбца / член структуры) из массива структур, и Значением данных карты является указатель на расположение этой структуры в файле отображения памяти. Это обеспечивает точно такую же функциональность, как индекс БД. Подписав карту на значение struct.member для любой заданной строки, вы вернетесь обратно к этой строке.
Вы можете иметь несколько карт для нескольких индексов, указывающих на одни и те же структуры / строки в массиве, используя разные данные struct.member для ключей карты для разных индексов.
Я игнорирую ваше заявленное требование добавить новые строки / структуры, так как кажется, что вы делаете одно чтение строк из БД, и на самом деле не нужно добавлять новые строки / структуры.
Если, однако, я ошибаюсь, и вам нужно добавить новые структуры / строки, то вместо выделения одного большого массива структур просто используйте malloc () и realloc () массива структур соответствующего размера и повесьте их. от указателей, которые являются «данными» карты. Таким образом вы теряете истинный доступ к ISAM, потому что структуры не хранятся физически смежно в памяти, но вы получаете возможность realloc (). Это компромисс. Доступ к ISAM может быть смоделирован путем итерации по карте, но он будет медленнее, чем последовательное чтение массива структур из памяти.