使用 Boost 图形库:boost::mutable_queue 中的 property_map

Posted

技术标签:

【中文标题】使用 Boost 图形库:boost::mutable_queue 中的 property_map【英文标题】:Using Boost Graph Library: property_map in boost::mutable_queue 【发布时间】:2009-08-13 01:18:24 【问题描述】:

我正在尝试使用我定义的自定义 Node 类型来实例化 boost::mutable_queue 的简单版本。使用以下 sn-p 实例化 mutable_queue<double> 实例没有问题(使用 std 和 boost 命名空间,以及所有需要的包括):

int N = 100;

mutable_queue<double> *q = 
    new mutable_queue<double>(N, less<double>(), identity_property_map());

但是,当我尝试将double 切换到Node(为此我已经超载了operator&lt;operator==),我无法再让它工作。这是我正在尝试的一个代表性示例:

typedef Node entry_t;
typedef vector<entry_t> storage_t;
typedef less<entry_t> comp_t;
typedef identity_property_map prop_map_t;
//typedef iterator_property_map<storage_t, 
//  property_map<storage_t, entry_t>::type >  prop_map_t;
typedef mutable_queue<entry_t, storage_t, comp_t, prop_map_t> queue_t;

queue_t *q = new queue_t(N, comp_t(), prop_map_t());

这给了我这些方面的错误:

错误:没有匹配函数调用‘boost::mutable_queue >, std::less, boost::identity_property_map>::push(Node*&)’
    mutable_queue.h:100:注意:候选者是:void boost::mutable_queue::push(const IndexedType&) [with IndexedType = UnitTest::Node_test()::entry_t, RandomAccessContainer = std::vector >, Comp = std::更少,ID = boost::identity_property_map]

我怀疑我不明白如何使用property_map。有人可以帮我解决这个问题吗?也许可以稍微解释一下为什么这是正确的做法?

【问题讨论】:

【参考方案1】:

我看不到您在哪里调用 push,但似乎您在推送 Node* 时应该推送 Node:

::push(Node*&)

它告诉你有一个对 Node const& 的推动:

push(const IndexedType&)

其中 IndexedType = 节点

【讨论】:

以上是关于使用 Boost 图形库:boost::mutable_queue 中的 property_map的主要内容,如果未能解决你的问题,请参考以下文章

在 Delphi 7 中使用 C++ Boost 图形库 (BGL)

在VS中关于boost::geometry图形开发库的几何图形可视化插件(Graphical Debugging)

使用 Boost 库分割几何

VS2015上boost可视化图形开发库的应用和操作

通过 SWIG 从 Ruby 调用 Boost?

使用捆绑属性创建 C++ Boost 图形