2014-09-30 1 views
0

У меня есть два набора 3D-данных. Каждый элемент в этих наборах представляет собой триплет типа (float,float,float). Эти наборы данных содержат около дубликатов элементов. Я хочу объединить эти два набора данных таким образом, чтобы в результате набора не было никаких повторяющихся элементов.Выполнение неупорядоченного набора триплетов

Наивный подход должен просто поддерживать список std::vector для хранения этих триплетов, любой новый триплет должен быть вставлен только, если она уже не присутствует в списке (проверка с помощью простых floating-point equality comparison)

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

Вопрос:

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

ответ

0

насчет:

std::unordered_set<tuple<float, float, float>> Triplets; 

X, Y, Z координаты не важны здесь, - но они могут быть важны для вас, так что вы можете выровнять их (по логике вещей, в tuple). Объект float в tuple может быть вам нехорошим, и вы можете создать более простую структуру для их хранения и реализовать operator == и/или operator<.

KD-дерево - это то, что плохо подходит для языка STL, ИМО. Вам понадобится алгоритм поиска для поиска определенной точки в 3D-сфере. Классы STL не являются хорошим выбором (кроме хранения данных).

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