我有代表一個名爲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);
};
};
實際上,而不是定義一個朋友函數,你應該使用成員函數bool operator ==(const Nick&a)。 –
你有選擇,但有很多程序員喜歡避免成員,如果不需要,並有運營商喜歡==作爲外部免費的朋友功能。我認爲這也是標準庫實現的情況。 – Nikko
剛剛按照你的建議嘗試過。答案不應該是這樣的:'std :: find(userlist.begin(),userlist.end(),&Nick(username,false));'? – Marschal