我有一个Node
类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
答案 0 :(得分:1)
您似乎已经实现了与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';