【发布时间】:2018-05-25 18:50:53
【问题描述】:
我有课
class Node{
int node;
int g;
int f;
int parent;
}
我创建了一个包含节点类型成员的集合
set<Node, MinCost> frontier;
其中 MinCost 是 Ordering 的类
class MinCost
{
bool operator()(const Node &x, const Node &y)
{
return x.f < y.f;
}
};
现在,我知道集合必须具有唯一值。在我的集合中,Node 的对象是唯一的,但对其排序的变量 (f) 可能不是。
那么,找到一个对象会按预期工作吗?
frontier.find(Node)会返回正确的值吗?
【问题讨论】:
-
因此,如果您尝试插入两个匹配用于排序的相同条件值的节点,第二个节点将被忽略。所以 Set 只持有第一个节点。
-
基于
MinCost的集合对于每个对象实例将具有唯一值f。时期。这不仅仅是一个排序,它是一个严格的弱排序。就您而言,这意味着如果该操作员对(x,y)和(y,x)都回答false,那么它们是等效的对象,并且根据一组规则,高地人会介入(只能有一)。 -
@Steephen,如果我必须有效地找到对象,那么存储对象的最佳方法是什么?
-
@AtulRamkrishnan 我不清楚您的要求。您是否打算将所有相同顺序的节点保留在集合中,然后选择
std::multiset,您可能需要调整逻辑以根据需要查找 -
@AtulRamkrishnan,您可以通过添加将
Node对象插入集合中的代码、从集合中查询Node对象并根据代码的作用提出问题来改进您的问题。