Строгий Слабый Порядок и std::sort()

Я пытался некоторое время, чтобы следующий код работал правильно. Проблема в функции сравнения sort(comp). Он сравнивает 2 двойных, но в некоторых случаях вызывает сбой программы с сообщением "Ошибка отладки! Программа: retrace.exe Файл:c: программные файлы (x86)\microsoft visual studio 10.0\vc\include\attribute Выражение: неверно" оператор<". Я на 100% это из рода stl, потому что, когда программа падает, последняя строка, которая была успешно выполнена, - это строка перед сортировкой. Сначала я думал, что это двойная проблема точности, но теперь я сомневаюсь в этом. Любая помощь или информация будут оценены.

Vector startg;
bool comp(const std::pair<Vector, int>& p1, const std::pair<Vector, int>& p2)
{
    return (p1.first-startg).lengthSqr() < (p2.first-startg).lengthSqr();
}

bool Blobs::intersect(const Ray& ray, IntersectionInfo& info) const
{
    startg.set(ray.start.x, ray.start.y, ray.start.z);
    std::vector<std::pair<Vector, int> > spheres_inters;
    //not important stuff
    for(int i=0;i<n;i++)
    {
        Vector H = ray.start - centres[i];
        double A = ray.dir.lengthSqr();
        double B = 2 * dot(H, ray.dir);
        double C = H.lengthSqr() - bounding_radius*bounding_radius;
        double D = B*B - 4*A*C;
        if(D<=0)
            continue;
        double x1 = (-B + sqrt(D)) / (2*A);
        double x2 = (-B - sqrt(D)) / (2*A);
        Vector v1 = ray.start + x1*ray.dir;
        Vector v2 = ray.start + x2*ray.dir;
        spheres_inters.push_back(std::make_pair(v1, i));
        spheres_inters.push_back(std::make_pair(v2, i));
    }
    if(spheres_inters.size()==0)
        return false;
    ///////////////////////////////////////////////////////////////

    std::sort(spheres_inters.begin(), spheres_inters.end(), comp);//THE PROBLEM IS HERE!

    /* the rest of the method.....*/

0 ответов

Другие вопросы по тегам