Сегодня столкнулся с непонятным для меня проседанием по времени на GCC решения, которое нормально заходит под MSC++.
Есть код, в котором что-то примерно такое:
struct point{double x,y;};
vector<pair<point,long > > v;
bool cmp(pair<point, int> a,pair<point, int> b)
{
if (a.first.x>b.first.x)return true;
if (a.first.x<b.first.x)return false;
if (a.first.y>b.first.y)return true;
return false;
}
int main()
{
sort(v.begin(),v.end(),cmp);
}
Тестирование в "запуске" показало, что при отправке решения под GCC время исполнения превышает время исполнения под студией в 9-12 раз.
Если исправить типы pair<point,long > / pair<point, int> (чтобы пары по описанию точно совпадали в векторе и в сортировке, не важно, будет в обеих случаях int или long), то это ускоряет программу процентов на 30, но все равно время выполнения больше студийного в 6-8 раз.
Кто-то может объяснить мне причины такой ощутимой разницы?
UPD. Если переписать просто на вектор точек (заменить пары на сами точки), то все равно разница сохраняется.