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

Implement custom comparitor for struct pointers

本文关键字:自定义 比较器 指针 结构 实现      更新时间:2023-10-16

我正在开发一个自定义的图形数据结构。为了简单起见,假设它表示为:

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 Graphi::Node*"

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

正确的方法是什么?

很抱歉,原来这是一个无关的错误。这只是一个名称空间问题——我在另一个(类似的)结构中引用了错误版本的类似方法。发布的代码有效。