实现结构指针的自定义比较器
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 Graphi::Node*"
很明显,这是一个打字问题,但我在网上看到的例子就是这样做的,所以我想知道我做错了什么。有人能帮我修这个例子吗?
正确的方法是什么?
很抱歉,原来这是一个无关的错误。这只是一个名称空间问题——我在另一个(类似的)结构中引用了错误版本的类似方法。发布的代码有效。
相关文章:
- std::设置自定义比较器
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- 使用迭代器的自定义比较器函数
- Cython中带有自定义比较器的优先级队列
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 为什么在类或结构中传递自定义比较器函数?
- 在priority_queue中使用默认容器但自定义比较器
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 通过函数指针对类内的 STL SET 使用自定义比较器
- 基于对象的两个属性的自定义比较器会引发异常
- 如何使用自定义比较器初始化类数据成员,该成员是 std::set
- 标准::set_intersection 带自定义比较器
- 使用自定义比较器C++映射,不插入所有元素
- 优先队列的自定义比较器
- C++ STL . 自定义比较器如何工作?