如何使用 unordered_set 与比较功能?
How to use unordered_set with compare function?
我为std::unorderd_set的第三个模板参数写了自己的比较函数。
我的功能是
static bool HasSamePosition(const Node& a, const Node& b);
在 class 节点中。现在我想在我的无序集中使用这个函数,
std::unordered_set<Node, std::hash<Node>, bool(*)(const Node& a, const Node& b)> closedlist(&Node::HasSamePosition);
但它不起作用。错误是,没有构造函数的实例与参数列表匹配。我错过了什么?
使用class更容易:
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;
嗯,编译器是对的。没有允许您仅将 KeyEqual
作为参数传递的构造函数。您需要使用另一个构造函数(请参阅 here)或更改函数的类型。
例如您可以使用一个辅助结构来环绕您的 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();
}
我为std::unorderd_set的第三个模板参数写了自己的比较函数。 我的功能是
static bool HasSamePosition(const Node& a, const Node& b);
在 class 节点中。现在我想在我的无序集中使用这个函数,
std::unordered_set<Node, std::hash<Node>, bool(*)(const Node& a, const Node& b)> closedlist(&Node::HasSamePosition);
但它不起作用。错误是,没有构造函数的实例与参数列表匹配。我错过了什么?
使用class更容易:
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;
嗯,编译器是对的。没有允许您仅将 KeyEqual
作为参数传递的构造函数。您需要使用另一个构造函数(请参阅 here)或更改函数的类型。
例如您可以使用一个辅助结构来环绕您的 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();
}