gpt4 book ai didi

c++ - 二进制 == : no operator found which takes a left hand operand; vector; iterator

转载 作者:行者123 更新时间:2023-11-30 05:33:34 24 4
gpt4 key购买 nike

我正在学习 vector ,现在我遇到了一个问题:二进制 ==: 没有找到接受类型为“Object”的左手操作数的运算符。删除后发现没有mustake了:

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==参数的类型不同于您为其重载运算符的类型,虽然这有效并且可以使用它但在相等方面没有多大意义,因为您正在比较两种不同的类型
  • 您正在使用 string*大多数时候这没有意义(如果你想避免复制,请传递 const std::string&)

关于c++ - 二进制 == : no operator found which takes a left hand operand; vector; iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com