這與this question檢查點是否已經在矢量/列表 - 性能
我點即會,例如,存儲100K +點的矢量。
std::vector<Point> point_vec;
我要檢查,如果要添加的位置(x,Y,Z)是已經在point_vec
(由class Point
實例表示)。下面的函數將檢查這個(在for
環)
bool samePoints(const Point& p1,
const double x1,
const double y1,
const double z1) {
return fabs(p1.x - x1) < EPSILON &&
fabs(p1.y - y1) < EPSILON &&
fabs(p1.z - z1) < EPSILON;
}
但是,我想檢查是否x in list/ vector
將是一個代價高昂的操作。我想知道是否有更好的方法來檢查a)點是否相等(可能是類Point上的運算符「=」和(b)是否存在其他更好的數據結構,而不是我應該創建的「vector」如果在矢量上有一個操作會加快檢查'相同點'
對於(b)請注意,我需要對std :: sort進行排序,所以任何其他的數據結構你可以建議應該能夠對這些點進行排序。
UPDATE
我想只有分類狀態的點。這僅僅是載體不排序的(所以我需要進行排序化經營ñ。我應該使用std::set<Point> point_set
而不是std::vector <Point> point_vec
嗎?如果是這樣:是否將每個點添加到一個昂貴的操作?或者,我最終做的「向量」排序結果總體上代價高昂?
@neil:嗨!點的集合從開始就是* not *在排序狀態。但是,最後,我確實希望所有點都是'排序'的。因此,我並不需要'未排序'點。所以你是否首先使用'std :: set point_set'而不是'std :: vector point_vec'來推薦? –
memC
@memC如果排序和查找速度是最重要的是。但集合不支持其他操作,例如,您可能需要的使用op []的隨機訪問。另一種方法是按排序順序維護矢量,並使用二分查找來檢查特定點是否在那裏。 – 2010-02-20 13:23:56
@尼爾:不好意思,但是你的意思是「合適的訂購功能」? – memC