为struct指针实现自定义比较器

时间:2016-07-28 15:32:11

标签: c++ comparison stdmap

我正在研究自定义图形数据结构。为简单起见,我们将其表示为:

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;

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

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

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