Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 布尔函数没有';t在稳定的排序函数中工作_C++_Algorithm_Sorting - Fatal编程技术网

C++ 布尔函数没有';t在稳定的排序函数中工作

C++ 布尔函数没有';t在稳定的排序函数中工作,c++,algorithm,sorting,C++,Algorithm,Sorting,海难 输入一个数字,而不是一个类型为乘客(number)的向量,其中乘客是一个由字符串名称和字符串状态组成的结构; 问题是按下一个优先级对船上的乘客进行排序: a) 第一个离开船的人是老鼠,比船离开人或孩子,比船离开人,最后一个离开船的人是船长; b) 有必要编写一个bool函数,我们将在函数stable_sort中使用该函数对乘客向量进行排序 我试过这个: int Priority1(Passenger pas) { if(pas.status == "rat")

海难

输入一个数字,而不是一个类型为乘客(number)的向量,其中乘客是一个由字符串名称和字符串状态组成的结构; 问题是按下一个优先级对船上的乘客进行排序: 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);
}

如果您正在尝试为其中一个 标准库函数,你的函数有点错误, 因为如果两个乘客都是老鼠,它会返回真值。到 建立适当的排序函数,比较任意两个条目 在相同的等价类中,必须返回false

再往下。。。如果两名乘客都是男性会发生什么?没有一个 如果为真,则您的
会从末尾跌落,导致
未定义的行为。(FWIW:这通常是一种不好的做法
在函数的左右两侧抛出
return
。一个 单返回,作为函数中的最后一行,在 任何控制结构都是很好的一般规则。)

无论如何,我将采取的方法是映射这两个值 转换为整数优先级,然后返回
priority(pas1)。更简单,保证不会错过
任何情况

if(pas1.status == "man" && pas2.status != "woman" && pas2.status == "child" && pas2.status != "rat")
我认为第三个条件
pas2.status==“child”
,应该是
pas2.status!=“儿童”


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

您的函数总是返回true?@ypnos否,有时它会从末尾脱落,导致未定义的行为(但在实践中,返回一个未指定的值。我如何在bool函数中添加状态,使rat的优先级高于妇女或儿童的优先级高于男子?正如我所说:将不同的乘客类型映射到表示优先级的整数值,然后比较整数值。