我已经找到了一个可以重复的例子,展示了我在使用std::sort
时遇到的奇怪行为。
我试图对一系列的二元组按照第二个元素排序。第二个元素的列表是[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);
这会产生正确的结果,但是当我仔细检查每一步排序函数的输出(即我打印到控制台的内容)时,我得到了一些非常有趣的输出。
完整的输出可以在这里找到,但是有一些奇怪的行(例如链接页面中的第46行),其内容为:
sorting (0 , 1)
但是0没有出现在输入列表中。为什么会这样?
return a.second > b.second;
。 - jrok