stxxl map<int, string>

Я ищу хранилище для индексации точек в 2-х измерениях. Чтобы быть более конкретным, я хотел бы сохранить геометрию путей (или ребер) в OpenStreetMap и сделать ее доступной для поиска. Запросы к хранилищу будут искать геометрию, основанную на двух конечных точках пути. Этот запрос будет выполнен для восстановления геометрии пути, найденного алгоритмом, подобным Дейкстре, поэтому важна скорость поиска геометрии.

Узлы в моем случае - просто беззнаковые целые, и геометрия может быть закодирована как строка или как вектор точек, в любом случае будет работать.

Количество узлов составило бы около 1 миллиарда, поэтому хранение всего в памяти не работает, поэтому было бы неплохо найти внешнее или дисковое хранилище.

Я уже пробовал Stxxl, но он не поддерживает не POD-типы, такие как строка или векторы, в качестве значений.

Спасибо за предложения заранее

1 ответ

Вы можете моделировать поведение, подобное карте, поддерживая два отдельных вектора. Скажи у тебя два <key, value> пары <0, "hello">, <1, "world">, Первый vector (of char) затем содержит,

h, e, l, l, o, \0, w, o, r, l, d, \0

Второй vector (of pair of two 'size_type's) содержит begin position а также one past end position каждого string как это,

<0, 6>, <6, 12>

Как видите, не обязательно, чтобы "world" идет после "hello", Таким образом, для любого нового <key, value> В паре вы просто обновляете начальную и конечную позиции во втором векторе (индексированный доступ) и помещаете значение в конец первого вектора (смещение не требуется).

РЕДАКТИРОВАТЬ: вместо vector (of pair of two 'size_type's)Вы также можете использовать map< int, pair<size_type, size_type> > что компенсирует лучшее решение, я думаю. Сделайте ваш выбор.

Другие вопросы по тегам