如何将unordered_set与比较功能一起使用
How to use unordered_set with compare function?
我为 std::unorderd_set 的第三个模板参数编写了自己的比较函数。我的函数是
static bool HasSamePosition(const Node& a, const Node& b);
在类节点中。现在我正在尝试在我的无序集合中使用这个函数,
std::unordered_set<Node, std::hash<Node>, bool(*)(const Node& a, const Node& b)> closedlist(&Node::HasSamePosition);
但它不起作用。错误在于,构造函数的实例与参数列表不匹配。我错过了什么?
编译器是对的。没有构造函数允许您仅将KeyEqual
作为参数传递。您需要使用另一个构造函数(请参阅此处)或更改函数的类型。
例如,您可以使用一个帮助程序结构来包装您的 HasSamePosition 调用并覆盖operator()(const Node& a, const Node& b)
struct Node{
static bool HasSamePosition(const Node& a, const Node& b);
};
struct NodeEqual
{
bool operator()(const Node& a, const Node& b) { return Node::HasSamePosition(a, b); }
};
int main()
{
std::unordered_set<Node, std::hash<Node>, NodeEqual> closedlist();
}
使用类更容易:
class Node
{
public:
class HasSamePosition
{
bool operator()(const Node& a, const Node& b)
{
// Put here content of your HasSamePosition function
}
};
....
};
std::unordered_set<Node, std::hash<Node>, Node::HasSamePosition> closedlist;
相关文章:
- 优先级队列功能比较
- 不正确的比较和交换计数器输出用于快速排序功能
- 如何改进我的"String"对象比较功能
- 使用不遵循"严格弱排序"的比较功能对列表进行排序
- 如何在C++中使用自定义比较功能对字符串进行排序?
- Qsort和不兼容的比较器功能 - C++
- 如何比较C 中的两个字符串并使用默认功能
- 比较在C 中的功能
- 标准::地图比较功能
- C++ lower_bound比较功能问题
- C 比较类中的功能奇怪的行为
- 如何准确测量和比较opencl速度以实现循环功能的简单速度
- std::set 比较器功能如何工作?
- 自定义stable_sort比较功能
- 带有额外参数的排序列表以进行比较功能
- 使用自定义比较功能设置相等性
- 相同的比较功能为C++中的排序和优先级队列提供不同的输出
- C - 如何正确地将比较器传递到STL功能
- 功能比较器可以是静态功能
- 检查功能比较问题