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

Print structure from STL priority queue C++ (QtCreator)

本文关键字:QtCreator 打印 结构 C++ STL 优先级 队列      更新时间:2023-10-16

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

这是我的结构:

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

这与存储在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
}

您需要定义具有以下签名的函数:

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

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