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

标签 c++ vector iterator

我正在学习 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/

相关文章:

python - 如果 range() 是 Python 3.3 中的生成器,为什么我不能在范围上调用 next()?

java - 无法在 Java 中的 Iterable 实现中转换类型

c# - 快速图中的无向图表示

c++ - 读取 Wav 文件,输出错误

c++ - 创建指向 vector<vector<bool>> 中元素的指针

c++ - 初始化 vector 和 std

c++ - 当屏幕分辨率高于 1920x1080 时捕获视频

c++ - 有哪些用于生成解析器的程序?

c++ - C++ 字符串和字符串 vector 的 C 实现

java - 使用迭代器,如何使用它们?