在具有自定义对象的集合中查找值

Finding value in a set with custom objects

本文关键字:集合 查找 对象 自定义      更新时间:2023-10-16

我有一个类

class Node{
int node;
int g;
int f;
int parent;
}

并且我创建了一个包含节点类型成员的集合

set<Node, MinCost> frontier;

其中 MinCost 是用于排序的类

class MinCost
{
bool operator()(const Node &x, const Node &y)
{
return x.f < y.f;
}
};

现在,我知道集合必须具有唯一值。在我的集合中,Node 的对象是唯一的,但它排序的变量 (f( 可能不是。

那么,找到一个对象会按预期工作吗?

frontier.find(Node)会返回正确的值吗?

我不相信这适用于std::set.您可能希望改用std::multiset,并使用equal_range()来查找具有相同成本的节点。

从 cpp 首选项:

在标准库使用 Compare 概念的任何地方,唯一性都是通过使用等价关系来确定的。用不精确的术语来说,如果两个对象 a 和 b 的比较都不比另一个少,则被认为是等价的:!comp(a, b( && !comp(b, a(。

换句话说,当你说两个Node对象不相等时,这与std::set完全无关,后者只定义了由提供的比较定义的相等性。因此,即使插入std::set也不会达到您的预期。