在具有自定义对象的集合中查找值
Finding value in a set with custom objects
我有一个类
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
也不会达到您的预期。
相关文章:
- Python 集合.计数器,如何避免重复查找
- 如何查找集合的所有分区 (C++)
- 如何在集合中的特定字符串中查找子字符串
- 在集合中查找使用结构C++的元素
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 在具有自定义对象的集合中查找值
- 我如何在C 中制作算法,以在不重复的情况下查找集合的变化(即n元素,选择k)
- 使用STL算法查找集合中的所有匹配项
- 在集合中查找结构向量
- 使用 STL 算法查找集合中的前两个不相邻元素
- 如何查找数组集合中第二大元素的索引
- 如何在<string>没有 std::string 中介的情况下制作一个支持通过 C 字符串查找的集合?
- 查找集合中第k个最大元素
- [唯一相等运算符]在集合中查找重复元素并将其分组的快速算法是什么
- C++模糊解算器:在集合中查找前缀
- 更好的std::在指针集合上查找,并将取消引用的值与常量引用值进行比较
- 查找两个集合之间的邻近匹配对
- 在包含自定义类型的集合中查找
- 在任意加长的集合中查找最大数不起作用
- 在结构体集合中查找项