我在从优先级队列打印数据时遇到问题。这个数据是结构。如何从队列中打印结构?
这是我的结构:
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();
答案 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<<
- 其余的都需要自定义定义。