I_love_Tanya_Romanova's blog

By I_love_Tanya_Romanova, 11 years ago, In Russian

Сегодня столкнулся с непонятным для меня проседанием по времени на 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. Если переписать просто на вектор точек (заменить пары на сами точки), то все равно разница сохраняется.