以下程序,一个简单的向量排序,在第二次排序调用时崩溃为t> = 17。即使t == 100,第一次排序也会成功。 挣扎了一段时间,但我无法弄清楚出了什么问题。有人可以帮助我吗?
我已经在MacBook Air和Linux机器上试过了,令人惊讶的是,我看到了同样的结果。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct tc
{
unsigned int n;
};
bool sort_by_n( tc a, tc b )
{
return a.n <= b.n;
}
vector<tc> tcv(100);
vector<int> tv(100);
int main()
{
unsigned int t;
cin >> t;
for ( unsigned int i = 0 ; i < t ; i++ )
{
cin >> tcv[i].n;
tv[i] = tcv[i].n;
}
sort( tv.begin(), tv.begin()+t); // ## This one works even for t == 100.
sort( tcv.begin(), tcv.begin()+t, sort_by_n ); // ## This one crashes for t >= 17
return 0;
}
答案 0 :(得分:10)
您需要提供严格弱排序,但
bool sort_by_n( tc a, tc b )
{
return a.n <= b.n;
}
只是一个弱势的订单。如果元素相同,则严格弱序必须返回false
。您需要将其更改为:
bool sort_by_n( tc a, tc b )
{
return a.n < b.n;
}