मुझे प्राथमिकता कतार से डेटा प्रिंट करने में समस्या है। यह डेटा संरचना है। मैं अपनी कतार से संरचनाएं कैसे प्रिंट कर सकता हूं?

यहाँ मेरी संरचना है:

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();
-1
Viacheslav Shagin 12 मई 2018, 20:56

2 जवाब

सबसे बढ़िया उत्तर

इसका 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
BoBTFish 12 मई 2018, 21:00

आपको निम्नलिखित हस्ताक्षर के साथ एक फ़ंक्शन को परिभाषित करने की आवश्यकता है:

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

जब आप g.top() से std::cout को पाइप कर रहे होते हैं तो यह कंपाइलर को पता चल जाता है। इंफिक्स << ऑपरेटर बस इस फ़ंक्शन (या बाईं ओर की वस्तु की operator<< विधि) को आमंत्रित करता है। मानक पुस्तकालय में केवल कुछ सरल, मानक प्रकारों में एक operator<< पूर्वनिर्धारित होता है - और बाकी को कस्टम परिभाषाओं की आवश्यकता होती है।

0
einpoklum 12 मई 2018, 21:00