![](/img/trans.png)
[英]Not declared in scope - friend comparator class for priority_queue C++
[英]C++ / priority_queue / Expression: invalid comparator
编辑我包含了带有重新编写的代码的编译错误的屏幕截图。 编译错误截图
原始帖子我正在编写一个小程序来练习我对priority_queue 容器的了解。 我正在尝试创建一个优先级队列,该队列接收具有年龄和性别的 Person 对象。 该队列应该优先考虑老年人,然后女性优先于男性(即,年长女性优先于年轻女性,女性优先于男性)。 我编写了一个应该处理优先级的谓词,但是当我尝试编译下面的代码片段时,我得到一个 Expression: invalid comparison 错误。 谁能解释我的谓词有什么问题?
#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++03 中,编译器抱怨vector<Person>> humanStack
- 为了解决这个问题,在两个尖括号之间插入一个空格: vector<Person> > humanStack
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.