मुझे पता है कि समान धागे हैं लेकिन मेरे कार्यक्रम को काम करने के लिए मजबूर करने में एक घंटे खर्च करने के बाद, मैंने एक मदद मांगी। सबसे पहले। मैंने सोचा है कि मुझे सी ++ बहुत अच्छा पता है क्योंकि मैंने कुछ ऐसा करने की कोशिश की जो PHP में बहुत आसान है (प्रोग्रामिंग भाषा जो मुझे सबसे अच्छी तरह से पता है) लेकिन सी ++ में बहुत जटिल है (कम से कम मेरे लिए बहुत जटिल है)। इसलिए मैं स्ट्रक्चर पॉइंटर्स की प्राथमिकता_क्यू बनाना चाहता हूं। यह स्पष्ट है कि मुझे अपनी तुलनात्मक कार्य बनाने की आवश्यकता है। तो मैं इस कोड की कोशिश की:संरचना के पॉइंटर्स की प्राथमिकता कतार
#include <iostream>
#include <list>
#include <queue>
using namespace std;
typedef struct MI
{
int nr;
int koszt;
bool operator<(const MI& a, const MI& b) {
return a.koszt > b.koszt;
}
} miasto, *miasto_wsk;
int main()
{
priority_queue<miasto_wsk> q;
miasto_wsk mi;
mi = new miasto;
mi->nr = 1;
mi->koszt = 2;
q.push(mi);
}
और जब मैं अपने कार्यक्रम संकलन करने की कोशिश की मैं संकलन त्रुटि के साथ समाप्त हो गया:
test.cpp:11:44: error: ‘bool MI::operator<(const MI&, const MI&)’ must take exactly one argument
तुम मुझे व्याख्या कर सकते हैं मैं गलत क्या कर रही हूं और मुझे स्पष्ट करने दें सभी structs के साथ इस सामान की तुलना में काम करता है (या मुझे एक अच्छा ट्यूटोरियल/लेख जो कि बताते हैं शुरू से ही देना)
संपादित करें:
मैं इस के लिए मेरे कोड बदल दिया है:
#include <iostream>
#include <list>
#include <queue>
using namespace std;
typedef struct miasto
{
int nr;
int koszt;
} *miasto_wsk;
bool myComparator(miasto_wsk arg1, miasto_wsk arg2) {
return arg1->koszt < arg2->koszt; //calls your operator
}
int main()
{
priority_queue<miasto_wsk, vector<miasto_wsk>, myComparator> q;
miasto_wsk mi;
mi = new miasto;
mi->nr = 1;
mi->koszt = 2;
q.push(mi);
}
और अब मैं यह त्रुटि संदेश हो रही है:
test.cpp: In function ‘int main()’:
test.cpp:19:64: error: type/value mismatch at argument 3 in template parameter list for ‘template<class _Tp, class _Sequence, class _Compare> class std::priority_queue’
test.cpp:19:64: error: expected a type, got ‘myComparator’
test.cpp:19:67: error: invalid type in declaration before ‘;’ token
test.cpp:24:7: error: request for member ‘push’ in ‘q’, which is of non-class type ‘int’
क्या समस्या है? हो सकता है कि मुझे structs के बजाय structs की प्रतियों का उपयोग करना चाहिए?
EDIT2
इस कोड को किसी भी संकलन त्रुटियों का उत्पादन नहीं करता:
#include <iostream>
#include <list>
#include <queue>
using namespace std;
typedef struct miasto
{
int nr;
int koszt;
bool operator< (const miasto& rhs)
{
koszt > rhs.koszt;
}
} *miasto_wsk;
int main()
{
priority_queue<miasto_wsk> q;
miasto_wsk mi;
mi = new miasto;
mi->nr = 1;
mi->koszt = 22;
q.push(mi);
}
तो @Angew विचार गलत हो रहा है।
EDIT3: यह मेरा अंतिम कोड है। यह न केवल त्रुटियों के संकलन के साथ संकलित करता है बल्कि वही कर रहा है जो मैं चाहता हूं। यही कारण है कि MI::operator<
समारोह दो के बजाय सिर्फ एक ही तर्क लेना चाहिए: यदि आप इतना @Angew
#include <iostream>
#include <list>
#include <queue>
using namespace std;
typedef struct miasto
{
int nr;
int koszt;
} *miasto_wsk;
struct MyComparator {
bool operator() (miasto_wsk arg1, miasto_wsk arg2) {
return arg1->koszt > arg2->koszt; //calls your operator
}
};
int main()
{
//priority_queue<miasto_wsk, vector<miasto_wsk>, myComparator> q;
priority_queue<miasto_wsk, vector<miasto_wsk>, MyComparator> q;
miasto_wsk mi;
mi = new miasto;
mi->nr = 1;
mi->koszt = 22;
q.push(mi);
miasto_wsk mi1;
mi1 = new miasto;
mi1->nr = 2;
mi1->koszt = 50;
q.push(mi1);
miasto_wsk mi2;
mi2 = new miasto;
mi2->nr = 3;
mi2->koszt = 1;
q.push(mi2);
cout << q.top()->koszt << endl;
q.pop();
cout << q.top()->koszt << endl;
q.pop();
cout << q.top()->koszt << endl;
q.pop();
}
आप सही हैं, मैंने प्राथमिकता_क्यू पर दस्तावेज़ों को गलत तरीके से पढ़ा है। मैंने अपना जवाब संपादित कर लिया है। – Angew