bool函数在stable_sort函数中不起作用

时间:2014-03-07 11:51:04

标签: c++ algorithm sorting

海难;

输入一个数字,而不是乘客乘客(数量)类型的向量,其中Passenger是一个由字符串名称和字符串状态组成的结构; 问题是按下一个优先顺序对船上的乘客进行分类:    a)首先离开船的人是老鼠,而不是船离开的人或者孩子,而不是船离开一个人,最后一个离开船的人是船长;    b)有必要编写一个bool函数,我们将在函数stable_sort中使用它来对乘客的矢量进行排序;

我试过了:

  int Priority1(Passenger pas)
{ 
    if(pas.status == "rat")
        return 3;
    if(pas.status == "woman" || pas.status == "child")
        return 2;
    if(pas.status == "man")
        return 1;
    if(pas.status == "captain")
        return 0;
}
bool Priority(Passenger pas1, Passenger pas2)
{
    return Priority1(pas1) > Priority1(pas2);
}

2 个答案:

答案 0 :(得分:1)

如果您尝试为其中一个实现订购功能 标准库函数,你的函数是错误的, 因为如果两名乘客都是老鼠,它就会返回至 建立正确的排序功能,比较任何两个条目 在同一个等价类中必须返回false。

再往下......如果两名乘客都是男性会怎么样?没有 你if的确是真的,你就会失败,结果就是这样 未定义的行为。 (FWIW:这通常是一种不好的做法 在函数中左右两侧抛出return。一 单个返回,作为函数的最后一行,以及 任何控制结构都是一个很好的一般规则。)

无论如何,我采取的方法是映射两个值 到一个整体优先级,然后返回Priority(pas1) < Priority(pas2);。更简单,保证不会错过 任何情况。

答案 1 :(得分:0)

if(pas1.status == "man" && pas2.status != "woman" && pas2.status == "child" && pas2.status != "rat")

我认为第三个条件pas2.status == "child"应为pas2.status != "child"

此外,函数中没有默认的return语句。