私が見ている奇妙な動作の再現可能な例を見つけることができましたstd::sort
ペアのリストをソートしようとしていますが、2 番目の要素でソートする必要があります。2 番目の要素のリストは[1 1 1 1 3 1 1 1 1 1 1 3 2 1 1 5 2 1 7 1]
.
以下は私のコードです:
std::vector<pair<int, double> > pairs;
for (int i = 0; i < 4; i++) {
pairs.push_back(pair<int, double>(1, 1));
}
pairs.push_back(pair<int, double>(1, 3));
for (int i = 0; i < 6; i++) {
pairs.push_back(pair<int, double>(1, 1));
}
pairs.push_back(pair<int, double>(1, 3));
pairs.push_back(pair<int, double>(1, 2));
pairs.push_back(pair<int, double>(1, 1));
pairs.push_back(pair<int, double>(1, 1));
pairs.push_back(pair<int, double>(1, 5));
pairs.push_back(pair<int, double>(1, 2));
pairs.push_back(pair<int, double>(1, 1));
pairs.push_back(pair<int, double>(1, 7));
pairs.push_back(pair<int, double>(1, 1));
ソート機能は次のとおりです。
template<typename T>
struct descending_sort {
bool operator()(pair<T, double> const & a, pair<T, double> const & b) const {
cout << "sorting (" << a.second << " , " << b.second << ")" << std::endl;
return a.second >= b.second;
}
};
descending_sort < int > d = descending_sort<int>();
std::sort(pairs.begin(), pairs.end(), d);
これは正しい結果を生成しますが、各ステップでの sort 関数の出力 (コンソールに出力したもの) を少し詳しく調べると、非常に興味深い出力が得られます。
出力全体はここで見つけることができますが、次のような奇妙な行 (つまり、リンクされたページの 46 行目) があります。
sorting (0 , 1)
しかし、0 は入力リストに表示されません。なぜこれがここにあるのですか?