gpt4 book ai didi

c++ - 在用户定义类型的容器上使用 std::find c++

转载 作者:行者123 更新时间:2023-11-28 03:38:00 26 4
gpt4 key购买 nike

我正在尝试编写一个搜索函数,通过调用 std:find 来获取 std::list 中的一个元素。但是我卡在了查找算法的第三个参数中,关于这个人 How to search for an element in an stl list?我确实使运算符 == 重载了很多,但它似乎仍然无法使用 std::find。

这是我的代码:

class Node
{
string word;
int count;

public:
Node(string _word) :word(_word), count(0) {}
~Node() {}

const string& getWord() const{
return word;
}
bool operator == (const Node& other) const {
return (this->word.compare(other.word) == 0);
}
};
const Node &getNode(const list<Node> &nodes, const string &word){
list<Node>::iterator itr;
itr = find(nodes.begin(), nodes.end(), new Node(word)); <-- no viable overload '='
return *itr;
}

我现在对这个问题非常着迷,请给我一些提示。谢谢

最佳答案

要使代码正常工作,只需从 sort 中删除 new称呼。但是,这不会使您的代码变得更好。

你不检查元素是否真的找到了,只是取消引用迭代器。如果未找到该元素,则这是未定义的行为。

现在,如何解决这个问题。

  1. 不提供此功能。如果 Node 的用户有一个列表,她应该完全有能力自己调用 std::sort
  2. 您不想编写包装样板,也不需要。您的类可以从 std::string 转换,因为单参数构造函数采用 string (不过这应该通过引用采用字符串)。所以你可以只写 std::find(begin(nodes), end(nodes), "foobar");
  3. 您还可以显式标记构造函数(大多数时候不需要转换行为),然后只需添加两个免费的 operator==(const Node&, const std::string&)operator==(const std::string&, const Node&).

无论如何。从 header 中删除 using namespace std;

关于c++ - 在用户定义类型的容器上使用 std::find c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270761/

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