为结构指针实现自定义比较器
Implement custom comparitor for struct pointers
我正在研究自定义图形数据结构。为简单起见,假设它表示为:
std::map<Node *, std::vector<Node *>>
其中 Node *
是自定义数据类型,结构。我想传入一个自定义指针比较器。即,
std::map<Node *, std::vector<Node *>, order>
假设 Node
是:
编写自定义比较器的正确方法是什么?我试过写:
struct Graph {
struct Node {
int component_idx;
Eigen::Vector2d pos;
struct order {
bool operator()(const Node * a, const Node * b) const {
return a->component_idx < b->component_idx;
}
};
};
std::map<Node *, std::vector<Node *>, Graph::Node::order> c_map;
};
但是,将 Node::order
传递给地图会导致在声明地图时出现编译错误,
std::map<Graph::Node *, Graph::Node *, Graph::Node::order> node_map;
错误 C2664 'bool Graph::Node::order::operator ()(const Graph::Node *,const Graph::Node *) const': 无法将参数 1 从 'Graph::Node *const ' 转换为 'const Graph::Node *'
很明显这是一个打字问题,但这是我在网上看到的例子是如何做到的,所以我想知道我做错了什么。有人可以帮我修正这个例子吗?
正确的做法是什么?
抱歉,事实证明这是一个不相关的错误。这只是一个命名空间问题——我在另一个(类似的)结构中引用了错误版本的类似方法。发布的代码有效。
我正在研究自定义图形数据结构。为简单起见,假设它表示为:
std::map<Node *, std::vector<Node *>>
其中 Node *
是自定义数据类型,结构。我想传入一个自定义指针比较器。即,
std::map<Node *, std::vector<Node *>, order>
假设 Node
是:
编写自定义比较器的正确方法是什么?我试过写:
struct Graph {
struct Node {
int component_idx;
Eigen::Vector2d pos;
struct order {
bool operator()(const Node * a, const Node * b) const {
return a->component_idx < b->component_idx;
}
};
};
std::map<Node *, std::vector<Node *>, Graph::Node::order> c_map;
};
但是,将 Node::order
传递给地图会导致在声明地图时出现编译错误,
std::map<Graph::Node *, Graph::Node *, Graph::Node::order> node_map;
错误 C2664 'bool Graph::Node::order::operator ()(const Graph::Node *,const Graph::Node *) const': 无法将参数 1 从 'Graph::Node *const ' 转换为 'const Graph::Node *'
很明显这是一个打字问题,但这是我在网上看到的例子是如何做到的,所以我想知道我做错了什么。有人可以帮我修正这个例子吗?
正确的做法是什么?
抱歉,事实证明这是一个不相关的错误。这只是一个命名空间问题——我在另一个(类似的)结构中引用了错误版本的类似方法。发布的代码有效。