Опитвам се да премахна дублирани елементи от вектор, като използвам следния компаратор
bool operator() ( const Point * p1, const Point * p2 ) const
{
return ( p1->X() < p2->X() ) || ( ( p1->X() == p2->X() ) && ( p1->Y() < p2-Y() ) );
}
и претоварен оператор ==
bool Point::operator == ( const Point &p ) const
{
return ( x - p.x ) * ( x - p.x ) + ( y - p.y ) * ( y - p.y ) < DIFF;
}
схематично премахване:
std::sort ( it_begin, it_end, Comp );
Points::iterator i_new_end = std::unique ( it_begin, it_end, Uniq);
items.erase ( i_new_end, this->items.end() );
Има обаче проблем с данните. Точките са сортирани по координата x
-0.0000000015 -6281103.8487118632 0.0000000000
-0.0000000011 -5993359.5353725236 0.0000000000
-0.0000000010 -5523510.0253371494 0.0000000000
-0.0000000009 -4885831.4582128422 0.0000000000
-0.0000000009 -4099699.3745807474 0.0000000000
-0.0000000008 -3189000.0000000000 0.0000000000
-0.0000000008 -2181404.4741311157 0.0000000000
-0.0000000008 -1107528.0771596823 0.0000000000 //unique
-0.0000000008 -0.0000000005 0.0000000000
-0.0000000007 1107528.0771596811 0.0000000000 //unique
-0.0000000007 2181404.4741311143 0.0000000000
-0.0000000007 3188999.9999999991 0.0000000000
-0.0000000006 4099699.3745807474 0.0000000000
-0.0000000006 4885831.4582128404 0.0000000000
-0.0000000005 5523510.0253371485 0.0000000000
-0.0000000004 5993359.5353725236 0.0000000000
0.0000000000 -6281103.8487118632 0.0000000000
0.0000000004 5993359.5353725236 0.0000000000
0.0000000005 5523510.0253371485 0.0000000000
0.0000000006 4099699.3745807474 0.0000000000
0.0000000006 4885831.4582128404 0.0000000000
0.0000000007 1107528.0771596811 0.0000000000
0.0000000007 2181404.4741311143 0.0000000000
0.0000000007 3188999.9999999991 0.0000000000
0.0000000008 -3189000.0000000000 0.0000000000
0.0000000008 -2181404.4741311157 0.0000000000
0.0000000008 -1107528.0771596823 0.0000000000
0.0000000008 -0.0000000005 0.0000000000
0.0000000009 -4885831.4582128422 0.0000000000
0.0000000009 -4099699.3745807474 0.0000000000
0.0000000010 -5523510.0253371494 0.0000000000
0.0000000011 -5993359.5353725236 0.0000000000
0.0000000015 -6281103.8487118632 0.0000000000
0.0089638987 -6377999.9999999991 0.0000000000
Операторът == не води до никакъв ефект, близките точки не се сортират една до друга...
Има ли някаква възможност за премахване на такива дублирани точки БЕЗ закръгляване (например дифренет компаратор)? Знам, че координатите имат много знаци след десетичната запетая...