繁体   English   中英

C++ / priority_queue / 表达式:无效的比较器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM