问题描述
编辑 我提供了带有重新编写的代码的编译错误的屏幕截图。 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