Здравствуйте, _Lestat_, Вы писали:
_L_>Парсер должен быть быстрым + не очень хочется заморачиваться со всеми этими списками и сортировками. Контейнера типа map, как в C++ у меня нет. Есть элегантный выход из ситуации или все-таки придется заморачиваться?
На Си, что ли, пишешь? Посмотри тогда на гномовскую библиотеку контейнеров GLib. Чтобы не велосипедировать.
"Регион" в твоей терминологии — это кортеж (имя файла, номер строки, ...), да?
То есть, у нас не стоит вопрос о поиске диапазонов, а тем более каких-то многомерных фигур.
Это просто точки в хитром пространстве, над которыми определён линейный порядок. (Грубо говоря: можно отсортировать по имени файла, а в пределах одного файла — по номерам строк).
Таким образом, тебе нужен ассоциативный контейнер с быстрым доступом. Это или дерево, или хеш-таблица.
Кстати о хеш-таблице. Имена файлов прекрасно хешируются. Тут можно сделать прирост производительности — отдельно хранить табличку с именами файлов, и отдельно — тот самый ассоциативный контейнер, элементы которого — (указатель на имя файла в таблице, номер строки, ...)
Поиск, не требующий постоянного сравнения строк, — будет летать, даже если он будет линейным.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>