从STL优先级队列C ++(QtCreator)打印结构

时间:2018-05-12 17:56:29

标签: c++ qt-creator

我在从优先级队列打印数据时遇到问题。这个数据是结构。如何从队列中打印结构?

这是我的结构:

struct pinfo
{
    int p_id;
    char path[50];
    int type;
    int priority;
};

我试图打印我的数据:

void showpq(priority_queue <pinfo> pQueue)
{
    priority_queue <pinfo> g = pQueue;
    while (!g.empty())
    {
        cout << "\t" << g.top();
        g.pop();
    }
    cout << '\n';
}

当我尝试打印数据时,收到错误消息:

main.cpp:23: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const value_type {aka const pinfo}’)
     cout << "\t" << g.top();

2 个答案:

答案 0 :(得分:1)

这与存储在priority_queue中的数据无关。您还没有告诉程序如何打印pinfo类型。你需要为它创建一个operator<<,如下所示:

std::ostream& operator<< (std::ostream& os, pinfo const& p)
{
    os << p.p_id << ", " << p.path << ", " << p.type << ", " << p.priority;
    // or however you want the members to be formatted
    return os; // make sure you return the stream so you can chain output operations
}

答案 1 :(得分:0)

您需要使用以下签名定义函数:

std::ostream& operator<<(std::ostream&&, const pinfo&);

当您将g.top()传递给std::cout时编译器已知。中缀<<运算符只是调用此函数(或左侧对象的operator<<方法)。只有少数简单的标准类型在标准库中预定义了operator<< - 其余的都需要自定义定义。