我正在研究自定义图形数据结构。为简单起见,我们将其表示为:
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&#39; bool Graph :: Node :: order :: operator()(const Graph :: Node *,const Graph :: Node *)const&#39;:无法从&#39转换参数1 ; Graph :: Node * const&#39; to&#39; const Graph :: Node *&#39;
显然这是一个打字问题,但这就是我在网上看到的例子,所以我想知道我做错了什么。有人可以帮我解决这个例子吗?
这样做的正确方法是什么?
答案 0 :(得分:0)
很抱歉,事实证明这是一个无关的错误。这只是一个命名空间问题 - 我在另一个(类似的)结构中引用了类似方法的错误版本。发布的代码有效。