次のコードは、GCC 6.1.0でコンパイルしたときにセグメンテーション違反を生成します。不思議なことに、エラーは一貫していますが、サイズが小さい場合や比較式が少し異なる場合は発生しません。 あなたはどんな考えがありますか?GCCのstd :: sortとlambdaの間違った動作
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
int n = 1000;
std::vector<std::pair<double, double>> vec;
for(int i = 0; i < n; i++) {
vec.push_back(std::make_pair<double, double>((7*i)%3, (3*i)%5));
}
std::sort(vec.begin(), vec.end(), [](std::pair<double, double> const & p1, std::pair<double, double> const & p2) {return (p1.first < p2.first) || ((p1.first==p2.first)&& (p1.second <= p2.second));});
return 0;
}
あなたが望むものがすべて辞典比較であれば、 'std :: pair'はあなたの介入なしにこれを実行していることを知っておくべきです。 – StoryTeller
@StoryTellerチップをありがとう。しかし、本当に今私を悩ましているのは、セグメンテーション違反の原因です! –
ソースがあなたの比較対象で、適切な順序関係を引き起こさない。このコードは、そのために未定義の動作をしています。 – StoryTeller