为结构指针实现自定义比较器

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 *'

很明显这是一个打字问题,但这是我在网上看到的例子是如何做到的,所以我想知道我做错了什么。有人可以帮我修正这个例子吗?

正确的做法是什么?

抱歉,事实证明这是一个不相关的错误。这只是一个命名空间问题——我在另一个(类似的)结构中引用了错误版本的类似方法。发布的代码有效。