簡體   English   中英

二進制==:找不到使用左操作數的運算符; 向量; 迭代器

[英]binary ==: no operator found which takes a left hand operand; vector; iterator

我正在學習向量,現在遇到了一個問題:二進制==:找不到使用“對象”類型的左操作數的運算符。 我發現刪除后沒有須要:

vector<Object>::iterator it = find(list.begin(), list.end(), name);

而且我不知道該怎么辦。 也許你會問這樣的事情

class Object {
private:
    string* name;
    vector<string>* facts;
public:
//...
}
    class ListOfObjects {
private:
    vector<Object> list;
public:
    void Realise(string* knowledge);
};

void ListOfObjects::Realise(string* knowledge) {
    //...
    vector<Object>::iterator it = find(list.begin(), list.end(), name);
    //...
}

問題是由std::find使用operator==來檢查當前選擇中是否存在您要搜索的元素這一事實而給出的。

由於您傳遞了string*因此在編譯std::find模板方法時搜索的方法是

bool Object::operator==(string* argument) const

必須實施,其實施將類似於

bool Object::operator==(string* argument) const
{
  return *argument == name;
}

但是我發現此解決方案存在潛在的問題:

  • 您正在通過特定字段在集合中搜索元素,如果這是您使用的主要方式,則另一個不同的集合會更好,例如std::unordered_map<string, vector<string>> ,這將使一切變得容易
  • 您可以使用與您要重載operator==的類型不同的類型的參數重載operator== ,盡管這樣做有效並且可以使用,但在相等性方面沒有多大意義,因為您正在比較兩個不同的類型
  • 您正在使用大多數情況下都沒有意義的string* (如果要避免復制,請傳遞const std::string&

我認為,如果您想以這種方式比較對象,那么您將尋找的內容稱為運算符重載。 這是一個簡短的示例:

http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

注意如何使用operator==

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM