我需要非重複的2D點的列表,所以我使用帶有自定義比較功能的std::set
。插入點後我使用的函數有問題,因爲std::find
有時找不到已經插入的點。std ::設置2D點的自定義比較器
const double tolerance = 0.1;
struct MyPoint2D
{
MyPoint2D(double x, double y) : _x(x), _y(y) {}
double _x, _y;
};
auto compMyPoint2D = [&](const MyPoint2D& pointA, const MyPoint2D& pointB) -> bool
{
if (pointA._x < pointB._x - tolerance) return true;
if (pointA._x > pointB._x + tolerance) return false;
if (pointA._y < pointB._y - tolerance) return true;
return false;
};
std::set<MyPoint2D, decltype(compMyPoint2D)> orderedMyPoints(compMyPoint2D);
MyPoint2D pointA(0.66,1.14);
MyPoint2D pointB(0.75, 0.0);
MyPoint2D pointC(0.57,1.19);
orderedMyPoints.insert(pointA);
orderedMyPoints.insert(pointB);
orderedMyPoints.insert(pointC);
if (orderedMyPoints.find(pointC)==orderedMyPoints.end())
{
std::cout << "Not found" << std::endl;
orderedMyPoints.insert(pointC);
if (orderedMyPoints.find(pointC)==orderedMyPoints.end())
std::cout << "Still not found" << std::endl;
}
我是否需要插入std::set
之前預購的2D點或有二維點更好的比較功能?
插入所有點後,我需要使用std::find
以獲取最終點索引。
我在Microsoft Visual Studio 2010上使用本機C++。
謝謝!我的想法是使用'std :: set'來清理點的列表,並獲得兩點比容差更近的點(這就是爲什麼容差如此之大,0.1),但我發現它是不可能的用'std :: set'來做。 – JordiS