मेरे पास Nick
नामक उपयोगकर्ता का प्रतिनिधित्व करने वाला एक वर्ग है और मैं std::find_if
पर इसका उपयोग करना चाहता हूं, जहां मैं यह जानना चाहता हूं कि उपयोगकर्ता सूची वेक्टर में एक ही उपयोगकर्ता नाम के साथ एक ऑब्जेक्ट शामिल है या नहीं। मैंने बनाने की कोशिश करके कुछ प्रयास किए हैं उपयोगकर्ता नाम मैं परीक्षण करना चाहते हैं के लिए एक नया Nick
वस्तु और == operator
अधिक भार और फिर वस्तु पर find/find_if
उपयोग करने की कोशिश:कस्टम वर्ग ऑब्जेक्ट्स के वेक्टर के साथ std :: find/std :: find_if का उपयोग कैसे करें?
std::vector<Nick> userlist;
std::string username = "Nicholas";
if (std::find(userlist.begin(), userlist.end(), new Nick(username, false)) != userlist.end())) {
std::cout << "found";
}
मैं अतिभारित है == operator
इसलिए की तुलना निक == Nick2 काम करना चाहिए, लेकिन समारोह रिटर्न error C2678: binary '==' : no operator found which takes a left-hand operand of type 'Nick' (or there is no acceptable conversion)
।
यहाँ संदर्भ के लिए मेरी निक वर्ग है:
class Nick {
private:
Nick() {
username = interest = email = "";
is_op = false;
};
public:
std::string username;
std::string interest;
std::string email;
bool is_op;
Nick(std::string d_username, std::string d_interest, std::string d_email, bool d_is_op) {
Nick();
username = d_username;
interest = d_interest;
email = d_email;
is_op = d_is_op;
};
Nick(std::string d_username, bool d_is_op) {
Nick();
username = d_username;
is_op = d_is_op;
};
friend bool operator== (Nick &n1, Nick &n2) {
return (n1.username == n2.username);
};
friend bool operator!= (Nick &n1, Nick &n2) {
return !(n1 == n2);
};
};
वास्तव में, किसी मित्र फ़ंक्शन को परिभाषित करने के बजाय आपको केवल सदस्य फ़ंक्शन बूल ऑपरेटर == (कॉन्स्ट निक और ए) का उपयोग करना चाहिए। –
आपके पास विकल्प है लेकिन वहां बहुत सारे प्रोग्रामर हैं जो सदस्य की आवश्यकता नहीं है, यदि आवश्यक नहीं है और ऑपरेटर को == बाहरी मुक्त मित्र कार्यों के रूप में रखना है। मुझे लगता है कि यह मानक पुस्तकालय कार्यान्वयन का भी मामला है। – Nikko
जैसा आपने सुझाव दिया है बस कोशिश की। जवाब इस तरह दिखना नहीं चाहिए: 'std :: find (userlist.begin(), userlist.end(), और निक (उपयोगकर्ता नाम, झूठा));'? – Marschal