tour_indexes.clear();
for (int i=0; i<num_of_cities; i++)
{
tour_indexes.push_back(i);
}
mt19937 gen(random_engine());
uniform_real_distribution<> dis(0, 1);
// Sort indexes based on comparing values in tour. Choose at random if equal
sort(tour_indexes.begin(), tour_indexes.end(),
[&tour, &dis, &gen](int &i1, int &i2)
{
if (tour[i1] == tour[i2])
{
return dis(gen) < 0.5;
}
return tour[i1] < tour[i2];
});
を与えるこれは私にtour[i1] == tour[i2]
にセグメンテーションフォルトを与え、そしてデバッグするとき、私はi2
は時々(一見非決定論的)それがあるべきよりも道大きいので、それがあることがわかります。 tour_indexes
がf.ex 0-20であるときには、F.ex 403163787(それは変化する)(tour_indexes
にはi2
が含まれていないというエラー時に2回チェックした)。C++は、ソートの反復が、時には間違った値に
これはすべて、メンバ変数tour_indexes
を含むクラスのメンバ関数で発生します。クラスオブジェクトは、関連する場合はshared_ptrにあります。何が問題なのでしょうか?ありがとう。
[最小限で完全であり、検証可能な例](http://stackoverflow.com/help/mcve)の作成を試みてください。 'tour'と' num_of_cities'の定義と初期化を含みます。 –
@Someprogrammerdude:はい、原則です。実際には "segfault from std :: sort"は少なくとも99%の時間、 "私の比較演算子は有効ではない"という意味です。 –