我有一个班级
class Node{
int node;
int g;
int f;
int parent;
}
我已经创建了一个包含Node
类型成员的集合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)
会返回正确的值吗?
答案 0 :(得分:0)
我认为这不适用于std::set
。您可能希望改为使用std::multiset
并使用equal_range()
来查找成本相同的节点。
来自cppreference:
标准库的所有地方都使用Compare概念,唯一性由等价关系决定。在不精确的术语中,如果两个对象的比较小于另一个,则认为两个对象a和b是等价的:!comp(a,b)&amp;&amp; !comp(b,a)。
换句话说,当你说两个Node
个对象不相等时,这与std::set
完全无关,std::set
只定义了由提供的比较定义的相等性。因此,即使插入public String lookFor(String inputWord, String[] dictionary) {
Arrays.sort(dictionary);
for (int index = dictionary.length - 1; index > 0; index--) {
if (isTheWordASubsequence(inputWord, dictionary[index]))
return dictionary[index];
}
return null;
}
private boolean isTheWordASubsequence(String inputWord,
String dictionaryWord) {
int spot = 0;
int offset = 0;
for (char item : dictionaryWord.toCharArray()) {
spot = (offset = inputWord.indexOf(item, spot)) >= spot ? offset : -1;
if (spot < 0)
return false;
}
return true;
}
也不会达到预期效果。