布尔函数在stable_sort函数中不起作用

A bool function doesn't work in stable_sort function

本文关键字:函数 不起作用 sort stable 布尔      更新时间:2023-10-16

沉船;

输入一个数字,而不是类型乘客乘客(数字)的向量,其中乘客是由字符串名称和字符串状态组成的结构;问题是将下一个优先级在船上的乘客排序: a)首先离开船的人是老鼠,比船离开了妇或孩子,比船离开一个人,离开船的最后一个是船长。 b)必须编写一个布尔函数,我们将在功能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。

再下降...如果两个乘客都是男人,会发生什么?没有任何您的 if是正确的,你掉下来了,导致不确定的行为。(fwiw:通常是一个不好的做法将return扔在功能中的左右和向左。一单个返回,作为功能的最后一行和外部任何控制结构都是一个很好的一般规则。)

无论如何,我要采用的方法是映射两个值为整体优先级,然后返回Priority(pas1) < Priority(pas2);。简单得多,并保证不要错过任何情况。

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

我认为第三种情况pas2.status == "child"应该是pas2.status != "child"

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