C++ 布尔函数没有';t在稳定的排序函数中工作
海难 输入一个数字,而不是一个类型为乘客(number)的向量,其中乘客是一个由字符串名称和字符串状态组成的结构; 问题是按下一个优先级对船上的乘客进行排序: a) 第一个离开船的人是老鼠,比船离开人或孩子,比船离开人,最后一个离开船的人是船长; b) 有必要编写一个bool函数,我们将在函数stable_sort中使用该函数对乘客向量进行排序 我试过这个:C++ 布尔函数没有';t在稳定的排序函数中工作,c++,algorithm,sorting,C++,Algorithm,Sorting,海难 输入一个数字,而不是一个类型为乘客(number)的向量,其中乘客是一个由字符串名称和字符串状态组成的结构; 问题是按下一个优先级对船上的乘客进行排序: a) 第一个离开船的人是老鼠,比船离开人或孩子,比船离开人,最后一个离开船的人是船长; b) 有必要编写一个bool函数,我们将在函数stable_sort中使用该函数对乘客向量进行排序 我试过这个: int Priority1(Passenger pas) { if(pas.status == "rat")
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的优先级高于妇女或儿童的优先级高于男子?正如我所说:将不同的乘客类型映射到表示优先级的整数值,然后比较整数值。