2016-08-06 2 views
-1

Итак, у меня есть возрастающая последовательность объектов (я могу с успехом преобразовать каждый объект в уникальные числа, возможно, из диапазона более 32 бит). Поэтому без ограничения общности предположим, что у меня есть последовательность int_64. Что вы делаете, если у вас есть последовательность, длина которой превышает size_t, и вам нужно работать с ней, как если бы вы работали с (неупорядоченными) наборами (т. Е. Выполняли поиск и избегали дубликатов, но упорядочение не имеет большого значения). Раньше я работал с повышения :: unordered_set но это имеет MAX_SIZE, который size_t .. есть возможность иметь контейнер (или даже расширить подталкивания :: unodered_set) таким образом, что он может содержать более size_t элементов ? Если последовательность слишком велика, было бы более эффективным, если бы я только сохранил последовательность в файле и выполнил поиск в файле?(неупорядоченный) контейнер, который имеет длину, превышающую size_t в C++

+0

Что именно ваша проблема? эффективность? какие операции необходимо выполнять для ваших данных? –

+0

моя проблема в том, что обычные контейнеры, с которыми я имею дело: например. std :: set, boost :: unordered_set и т. д. имеют max_size, который не превышает определенной суммы (скажем, max значения int_32), но у меня есть данные с числом значений, которое больше этой суммы, и мне нужен контейнер для этого данные. – quantum

+0

Зачем вам нужен тип 'set'? как насчет использования обычного «вектора»? –

ответ

0

Предел контейнера - это небольшая красная сельдь: ваша система сначала запустит адресное пространство.

Если вы хотите получить библиотеку, в stxxl есть контейнеры с поддержкой дисков. Или просто используйте базу данных sql или другого типа.


Если бы я был, и я не мог реализовать свою собственную базу данных или stxxl, я бы хэш до меньшего размера (скажем, 24 бит) и держать до N элементов непосредственно там. Когда вам нужно знать размер или элементы памяти заполнены, вы читаете таблицу на диске для этого 24-битного хэша.

Возможно фьючерсы на фьючерсы, чтобы рассчитать полный размер, позволяя получить доступ к асинхронному диску для обновления значений и узлов 2^24.

+0

Да, это более или менее то, о чем я думал. Более или менее вам придется создавать свою собственную структуру данных. Конечно, stxxl - это вариант, но он также поддерживает наборы? – quantum

Смежные вопросы