वर्तमान में वस्तु का एक वेक्टर सॉर्ट करने के लिए, स्ट्रिंग वाली प्रयास कर प्रत्येक वस्तु के साथ, C++सी ++ में परिणामों में ओवरलोडिंग तुलना ऑपरेटर "अवैध ऑपरेटर <"
तार अक्षरों या संख्याओं (एक डिजाइन बाधा की वजह से शामिल कर सकते हैं , यह आवश्यक है, क्योंकि तुलनित्र बदला जा सकता है)।
इस समय, वस्तु का वर्ग अधिभारित हो गया है, ताकि जब दो वस्तुओं की तुलना की जा सके, तो उनके तारों की तुलना की जाती है। यह एक बिंदु पर काम करता है - हालांकि, जब मैं वस्तुओं को व्यवस्थित करने के लिए एक प्रकार के ऑपरेशन (जैसे एसटीएल सॉर्ट) का उपयोग करता हूं, तो यह ऑर्डर में "1", "4", "12" जैसे तीन तारों को सॉर्ट करेगा "1", "12", "4"। 4 12 से अधिक है, लेकिन क्योंकि यह सबसे बाएं अंक से तुलना करना शुरू करता है, यह 'गलत' प्रकार होता है।
मेरी प्रारंभिक प्रतिक्रिया यह बदलना था कि मैं तुलना ऑपरेशन को ओवरलोड कर रहा था। मैं सबसे पहले स्ट्रिंग की लंबाई की जांच करूँगा जो मैं तुलना कर रहा था - यदि स्ट्रिंग की सामग्री बड़ी या छोटी थी तो एक बताना संकेत होगा।
// overloaded comparision operators
friend bool operator<(const nodeRecord & record1, const nodeRecord & record2){
// we need to deal with strings of different lengths...
if(record1.comparator.length() < record2.comparator.length())
return true;
else
return (record1.comparator < record2.comparator);
}
एक में इस आपरेशन के परिणाम "अभिव्यक्ति: अवैध ऑपरेटर <" रनटाइम के दौरान संदेश।
कोई विचार है कि मैं कहां गलती कर रहा हूं? ऐसा लगता है कि मैं ऑपरेशन को निर्देशित करने में सक्षम होना चाहिए कि मैं सॉर्टिंग ऑपरेशन कैसे करना चाहता हूं - भले ही यह अमान्य है, क्योंकि मैं वर्तमान में ऑब्जेक्ट्स रखने के लिए वेक्टर का उपयोग कर रहा हूं। nodeRecord वस्तु के प्रारंभ के दौरान
तुलनाकारी:
nodeRecord(int fromNode, int toNode, int connectionCost, bool compareByCost = false){
// take the provided stock information and insert it into the object
stringstream fromNodeSS;
fromNodeSS << fromNode;
this->fromNode = fromNodeSS.str();
stringstream toNodeSS;
toNodeSS << toNode;
this->toNode = toNodeSS.str();
this->connectionCost = connectionCost;
// set the comparator to our chosen comparision term
if (!compareByCost){
this->comparator = this->fromNode; // we use from node in this case, since we build the tree outwards
}
else{
stringstream ss;
ss << this->connectionCost;
this->comparator = ss.str(); // we use the connection cost in this case, to allow us to sort new connections
}
// set this as a non-null (active) record
this->nullRecord = false;
}
तुलनित्र क्या है? उसके लिए कोड पोस्ट करें। –
क्या आप तुलनित्र की परिभाषा दिखा सकते हैं? –
@ माइक और @ मारियो - तुलनित्र को नोडरेकॉर्ड ऑब्जेक्ट के प्रारंभ के दौरान प्रारंभ किया गया है। आप इसे ऊपर देख सकते हैं। – BSchlinker