2012-10-02 20 views
14

के अंदर जोड़ी मैं प्राथमिकता कतार में जोड़े को स्टोर करने की कोशिश कर रहा हूं और मैं एक तुलना फ़ंक्शन का उपयोग कर रहा हूं जो प्रत्येक जोड़ी के दूसरे मान की तुलना करता है।प्राथमिकता कतार

#include<iostream> 
#include<queue> 
#include<utility> 
using namespace std; 

class CompareDist 
{ 
public: 
    bool operator()(pair<int,int> n1,pair<int,int> n2) { 
     return n1.second>n2.second; 
    } 
}; 
int main() 
{ 
    priority_queue<pair<int,int>,CompareDist> pq; 
} 

जब मैं इस संकलन मैं एक त्रुटि

error: no type named ‘value_type’ in ‘class CompareDist’ 

क्या वजह हो सकती है एसटीएल के लिए नया हूँ मिलता है।

उत्तर

34

इस तरह क्या priority_queue लग रहा है: CompareDist

template< 
    class T, 
    class Container = std::vector<T>, 
    class Compare = std::less<typename Container::value_type> 
> class priority_queue; 

दूसरे शब्दों में, तीसरे तर्क होना चाहिए और दूसरा तर्क कंटेनर (जो value_type है) होना चाहिए, निम्नलिखित की तरह:

priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq; 

ध्यान दें, priority_queue जिसे "कंटेनर एडाप्टर" कहा जाता है। एक और कंटेनर अंतर्निहित कंटेनर के रूप में उपयोग किया जाता है और प्राथमिकता_क्यू के पास विशेष सदस्यों को इसका उपयोग करने के लिए कार्य किया जाता है। एक कंटेनर एडाप्टर का एक और उदाहरण std :: ढेर होगा।

0
priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq; 

आपको प्राथमिकता_क्यू के अंतर्निहित टेम्पलेट के लिए दूसरा तर्क प्रदान करने की आवश्यकता है।

संबंधित मुद्दे