c++ - c++中STL的priority_queue

标签 c++ stl priority-queue

我想构造两个具有不同比较方法的优先级队列(有两个反向优先级方法名为 cmp1 和 cmp2) 我的程序无法通过编译器检查,为什么会出现这样的错误,有没有更好的解决办法?

#include <iostream>
#include <queue>
#include <string>
using namespace std;

struct item
{
    string name;
    string sex;
    string id;
    double score;
    friend istream& operator >> (istream &is,item& data)
    {
        is>>data.name>>data.sex>>data.id>>data.score;
    }
    /*friend bool operator < (item& a,item& b)
    {
        return a.score<b.score;
    }*/
};

struct cmp1{
    operator bool()(item& x,item& y)
    {
        return x.score>y.score;
    }
};
struct cmp2
{
    operator bool()(item& x,item& y)
    {
        return x.score<y.score;
    }
};
int main()
{
    priority_queue<item,vector<item>,cmp1> boys;
    priority_queue<item,vector<item>,cmp2>girls;
    item temp;
    int num;
    cin>>num>>temp;
    for(int i=0;i<num;i++)
    {
        if(temp.sex=="M")
            boys.push(temp);
        else
            girls.push(temp);
    }

    return 0;
}

最佳答案

我将对这个问题进行大胆的猜测……您的比较仿函数不正确。您需要重载函数调用运算符,而不是重载 operator bool,即

struct cmp1{
    bool operator()(const item& x, const item& y)
    {
        return x.score>y.score;
    }
};

struct cmp2
{
    bool operator()(const item& x, const item& y)
    {
       return x.score<y.score;
    }
};

(也许这是您的本意,只是语法有点错误?)

关于c++ - c++中STL的priority_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091422/

相关文章:

c++ - Dijkstra 算法 : memory consumption

c++ - 如何创建指向字节数组的指针?

c++ - STL 中的 vector 与列表

java - 如何使用优先队列?

c++ - 如何在 QT 语言翻译中使用 & 符号字符串

c++ - 这两个与结构相关的声明之间有区别吗?

c++ - 为什么我每次使用 mingw gcc4.8.1 运行 std::random_device 都会得到相同的序列?

C++:很难从 vector 中删除一个项目

c++ - 检查新添加的unique_ptr到priority_queue的位置

c++ - vector 迭代器不可取消引用。成对的优先队列。