如何解决C ++ / priority_queue /表达式:无效的比较器
编辑 我提供了带有重新编写的代码的编译错误的屏幕截图。 compile error screenshot
原始帖子 我正在编写一个小程序来练习对priority_queue容器的了解。我正在尝试创建一个优先级队列,以接受具有年龄和性别的Person对象。队列应该优先考虑老年,然后女性优先于男性(即,女性优先于年轻女性,女性优先于男性)。我写了一个应该处理优先级的谓词,但是当我尝试编译下面的代码片段时,我得到了一个Expression:无效的比较器错误。谁能解释我的谓词有什么问题?
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <iostream>
class Person
{
public:
int age;
bool isFemale;
Person(int Age,bool Female)
{
age = Age;
isFemale = Female;
}
bool operator < (const Person& compareHuman) const
{
bool bRet = false;
if (age < compareHuman.age)
bRet = true;
if (isFemale && compareHuman.isFemale)
bRet = true;
return bRet;
}
};
int main()
{
std::priority_queue<Person,std::vector<Person>> humanStack;
humanStack.push(Person(15,true));
humanStack.push(Person(42,true));
humanStack.push(Person(76,true));
humanStack.push(Person(65,false));
humanStack.push(Person(21,false));
humanStack.push(Person(35,true));
humanStack.push(Person(15,false));
while(humanStack.size() != 0)
{
std::cout << "This person is age " << humanStack.top().age << std::endl;
humanStack.pop();
}
}
解决方法
问题是您的谓词少于您的谓词未正确实施。如所写,如果isFemale
为真,则值将小于自身。一个值绝不能与一个有效谓词相比较。您可能想要这样的东西:
bool operator < (const Person& compareHuman) const
{
if (age < compareHuman.age)
return true;
else if (compareHuman.age < age)
return false;
// Note the ! added on this line
return isFemale && !compareHuman.isFemale;
}
,
您的代码使用C ++ 11为我编译而没有错误。 (c声)。
在c ++ 03中,编译器抱怨button.config["text" = "X"]
-要解决此问题,请在两个尖括号之间插入一个空格,例如:vector<Person>> humanStack
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。