Распечатать структуру из очереди приоритетов STL C ++ (QtCreator) - PullRequest
0 голосов
/ 12 мая 2018

У меня проблема с печатью данных из приоритетной очереди. Эти данные являются структурой. Как я могу распечатать структуры из моей очереди?

Вот моя структура:

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 голосов
/ 12 мая 2018

Вам нужно определить функцию со следующей подписью:

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

, которая известна компилятору, когда вы передаете от g.top() до std::cout.Оператор infix << просто вызывает эту функцию (или метод operator<< объекта левой стороны).Только несколько простых стандартных типов имеют operator<<, предопределенный в стандартной библиотеке, а остальные нуждаются в пользовательских определениях.

0 голосов
/ 12 мая 2018

Это не имеет ничего общего с данными, хранящимися в 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
}
...