Я решаю некоторые проблемы геометрии, и я не знаю, как справиться со странной проблемой с мультимножеством.
Я должен вычислить количество пар окружностей, имеющих общую точку. Так что я использую алгоритм стреловидной линии, чтобы решить эту проблему. Когда у меня есть разные круги по всей оси X, нижняя и верхняя границы отлично работают. Но когда у меня есть круги на оси у
Предположим, у меня есть круги на:
<0,10><0,20><0,30> все с радиусом 5, mset возвращает мне нулевой указатель на нижней и верхней границе.
struct point{
int x, y, pos,m;
bool operator<(const point &p)const {
return y<p.y; };
};std::multiset<point>::iterator itlow,itup;
itlow = mset.lower_bound (p[i]);// p is a vector of points
itup = mset.upper_bound (p[i]); // mset is a multiset of points
// check the iterators
if(itlow==mset.end())
printf("NULL\n");
if(itup==mset.end())
printf("NULL\n");
я также попытался сменить оператора таким образом
bool operator<(const point &p1,const point &p2) {
if(p1.y!=p2.y)
return p1.y<p2.y;
else if (p1.x!=p2.x)
return p1.x<p2.x;
else if(p1.pos!=p2.pos)
return p1.pos<p2.pos;
else return p1.m>p2.m; };
это падает.
Задача ещё не решена.
Других решений пока нет …