排序不正确
Not sorting properly
我有一个类节点
class Node
{
public:
int Number;
char Ch;
Node(int N, char A)
{
Number = N;
Ch = A;
}
};
我想按如下方式排序。首先按数字排序,如果数字相等,则将字符为"M"的字符放在前面。
bool Srt(Node A, Node B)
{
if (A.Number < B.Number)
return true;
if (A.Number > B.Number)
return false;
if (A.Number == B.Number)
{
if (B.Ch == 'M')
{
return true;
}
return false;
}
return false;
}
但是,对于以下输入,这不能正常工作:
1 S
2 S
3 S
4 S
5 S
6 S
7 S
8 S
9 S
10 S
11 S
12 S
13 S
14 S
15 S
16 S
999999985 M
999999986 M
999999987 M
999999988 M
999999989 M
999999990 M
999999991 M
999999992 M
999999993 M
999999994 M
999999995 M
999999996 M
999999997 M
999999998 M
999999999 M
1000000000 M
它应该再次返回列表,但相反,它返回
1 S
2 S
3 S
4 S
5 S
6 S
7 S
8 S
9 S
999999993 M
999999994 M
999999995 M
999999996 M
999999997 M
999999998 M
999999999 M
1000000000 M
10 S
11 S
12 S
13 S
14 S
15 S
16 S
999999985 M
999999986 M
999999987 M
999999988 M
999999989 M
999999990 M
999999991 M
999999992 M
看起来您已经实现了与std::sort
一起使用的小于比较。
这样的比较器需要是一个严格的弱排序,这样A < B
意味着!( B < A )
。如果数字相等并且两者都具有字符M
,则您的函数会违反此规定。试试这个:
if (A.Number < B.Number)
return true;
if (A.Number > B.Number)
return false;
// Now A.Number == B.Number so there is no need to check.
return B.Ch == 'M' && A.Ch != 'M';
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 不正确的比较和交换计数器输出用于快速排序功能
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- 堆排序它不起作用或计算不正确
- 合并排序不正确的输出 c++
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 排序向量不断修改数据并打印不正确的结果
- C++选择排序的实现不正确.任何建议
- 基本合并排序中的输出不正确
- 排序不正确
- C++ 拓扑排序给出不正确的输出
- 使用 qsort() 时对包含C++字符串的类进行不正确/错误的排序
- 列表排序不正确
- 列的排序不正确 ClistCtrl
- 选择排序输出不正确
- 为什么我的MinHeap对整数排序正确,但我自己的类却不正确
- 计数排序我的输入是1,4,3,1但输出是垃圾值1,1,3输入不正确
- 堆排序向量的客户端,传递迭代器不正确