問題
#include <iostream>
using namespace std;
bool Gt(const int &a, const int &b)
{
return a >= b;
}
int num[100];
int main()
{
num[0] = 100;
num[1] = 100;
num[3] = 10;
sort(num, num+3, Gt);
for (int i = 0; i < 3; i ++)
cout << num[i] << endl;
return 0;
}
問:上面程序輸出什麼?
答:100 100 10 ?
錯!輸出不確定。
分析:
比較函數有個坑,不滿足嚴格弱關係序(strict weak ordering)。
參見C++參考手冊:sort的約束二。
嚴格弱關係序參見wiki
總結:
大坑小坑都是坑,坑坑害人。