2014-09-30 3 views
0

두 개의 3D 데이터 세트가 있습니다. 이 세트의 각 요소는 (float,float,float) 유형의 세 쌍입니다. 이 데이터 세트에는 중복 요소가 있습니다. 병합 이러한 두 가지 데이터 세트는 결과 집합에 중복 요소가 없도록합니다.정렬되지 않은 트리플 세트 구현

본래의 접근법은 단순히 이들 삼중 저장 std::vector의리스트를 유지하는 것, 새로운 삼중가 이미리스트에 존재하지 않는 경우에만 삽입해야 줄이기 위해

(단순 floating-point equality comparison를 사용하여 검사) 삽입 시간, 다른 접근법은 중복을 피하기 위해 을 현재 트리의 삼중 항에 대해 쿼리 한 후에 만 ​​k- 트리에 트리플릿을 저장할 수 있습니다.

질문 :

내가 효과적으로 다른 방법은 부동 소수점 삼중 요소와 정렬되지 않은 집합을 구현이 있는지 알고 싶습니다?

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

은 X, Y가, Z 좌표는 여기에 중요하지 않습니다 -하지만 당신은합니다 (tuple에서, 논리적)으로 정렬 할 수 있도록 그들이 당신을 위해 중요 할 수 있습니다에 대해 어떻게

답변

0

. 의 tuple 개체는 사용자에게 좋지 않을 수 있으며 더 간단하게 구조를 작성하여 operator == 및/또는 operator<을 구현할 수 있습니다.

KD 트리는 STL 용어 인 IMO에 잘 맞지 않는 것입니다. 3D 영역에서 특정 지점을 검색하려면 "검색"알고리즘이 필요합니다. STL 클래스는 단순히 데이터를 보유하는 것 외에는 좋은 선택이 아닙니다.