Карта STL с вектором для ключа

Я работаю с некоторыми двоичными данными, которые я хранил в произвольно длинных массивах беззнаковых целых чисел. Я обнаружил, что у меня есть дублирование данных, и я хочу игнорировать дубликаты в краткосрочной перспективе и удалить любую ошибку, вызывающую их в долгосрочной перспективе.

Я собираюсь вставить каждый набор данных в карту перед его сохранением, но только если он не был найден на карте для начала. Моя первоначальная мысль заключалась в том, чтобы иметь карту строк и использовать memcpy в качестве молотка, чтобы заставить целые числа в массив символов, а затем скопировать это в строку и сохранить строку. Это не удалось, потому что большая часть моих данных содержит несколько байтов 0 (также известного как NULL ) в начале соответствующих данных, поэтому большая часть очень реальных данных была выброшена.

Моя следующая попытка будет std :: map , int> , но я понимаю, что не знаю, будет ли функция вставки карты Работа.

Выполнимо ли это, даже если это плохо сказано, или есть лучший способ подойти к этой проблеме?

Редактировать

Было замечено, что я не разъяснил, что я делаю, поэтому вот надеюсь лучше описание.

Я работаю над созданием минимального остовного дерева, учитывая, что у меня есть несколько деревьев, содержащих фактические конечные узлы, с которыми я работаю.Цель состоит в том, чтобы выбрать деревья, которые имеют самую короткую длину и которые покрывают все конечные узлы, где выбранные деревья имеют не более одного общего узла друг с другом и все связаны. Я основываю свой подход на бинарном дереве решений, но вношу несколько изменений, чтобы, надеюсь, обеспечить больший параллелизм.

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

Например, если бы в набор данных из 5 деревьев было включено только дерево 0, я бы начал с

00001

Отсюда я могу сгенерировать:

00011

00101

01001

10001

Каждый из них затем может обрабатываться параллельно, поскольку ни один из них не зависит друг от друга. Я делаю это для всех отдельных деревьев (00010, 00100 и т. Д.) И должен, я не нашел времени, чтобы формально это доказать, иметь возможность сгенерировать все значения в диапазоне (0,2 ^ n) один раз и только один раз.

Я начал замечать, что для завершения многих наборов данных требуется гораздо больше времени, чем я думал, и включил вывод отладки, чтобы просмотреть все сгенерированные результаты, а также быстрый сценарий Perl, позже было подтверждено, что у меня было несколько процессов генерируя тот же результат. С тех пор я безуспешно пытался определить, откуда берутся дубликаты, и надеюсь, что это будет работать достаточно хорошо, чтобы я мог проверить полученные результаты без, иногда, трехдневного ожидания. вычисления.

13
задан jthecie 18 January 2012 в 21:55
поделиться