简体   繁体   English

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

[英]C++ / priority_queue / Expression: invalid comparator

EDIT I included a screenshot of the compile error with reworked code.编辑我包含了带有重新编写的代码的编译错误的屏幕截图。 compile error screenshot编译错误截图

ORIGINAL POST I am writing a little program to practice my knowledge of priority_queue containers.原始帖子我正在编写一个小程序来练习我对priority_queue 容器的了解。 I am trying to create a priority-queue that takes in Person objects that have an age and sex.我正在尝试创建一个优先级队列,该队列接收具有年龄和性别的 Person 对象。 The queue is supposed to prioritize older ages and then females over males (ie. older females are prioritized over younger females and females are prioritized over males).该队列应该优先考虑老年人,然后女性优先于男性(即,年长女性优先于年轻女性,女性优先于男性)。 I've written a predicate that should handle the prioritization but I get a Expression: invalid comparator error when I try to compile the code snippet below.我编写了一个应该处理优先级的谓词,但是当我尝试编译下面的代码片段时,我得到一个 Expression: invalid comparison 错误。 Can anyone explain what the problem is with my predicate?谁能解释我的谓词有什么问题?

#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(); 
    }
}

The problem is your less than predicate isn't implemented correctly.问题是您的小于谓词未正确实施。 As written a value will compare less than itself if isFemale is true.如所写,如果isFemale为真,则值将小于自身。 A value should never compare less than itself with a valid predicate.一个值永远不应该将小于自身的值与有效的谓词进行比较。 You probably want something like this:你可能想要这样的东西:

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;
}

Your code compiles w/o error for me using C++11.您的代码使用 C++11 为我编译没有错误。 (clang). (铛)。

In c++03, the compiler complains about vector<Person>> humanStack - to fix that, insert a space between the two angle brackets thus: vector<Person> > humanStack在 c++03 中,编译器抱怨vector<Person>> humanStack - 为了解决这个问题,在两个尖括号之间插入一个空格: vector<Person> > humanStack

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 未在范围中声明-Priority_queue C ++的好友比较器类 - Not declared in scope - friend comparator class for priority_queue C++ C++:struct和decltype比较器的priority_queue - c++: priority_queue of struct and decltype comparator 具有自定义字符串比较器的字符串的priority_queue的C ++向量 - C++ vector of priority_queue of strings with custom strings comparator 为 priority_queue 使用自定义比较器会增加时间 C++ - Using custom comparator for priority_queue increases time C++ C++ priority_queue,带有自定义比较器并删除任何项目 - C++ priority_queue with custom comparator and removal of any item C++ 如何使用自定义比较器声明 priority_queue 数组 - C++ how to declare an array of priority_queue with customed comparator priority_queue c++ 带有自定义比较器和 O(n) 时间 - priority_queue c++ with custom comparator and O(n) time 修改的C ++的priority_queue比较器无法正常工作 - Modified comparator for priority_queue of C++ not working properly 使用带有lambda比较器错误的映射的C ++ priority_queue - C++ priority_queue using map with lambda comparator error C ++中std :: priority_queue的比较器部分的含义是什么? - What is the meaning of the comparator part of the std::priority_queue in C++?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM