我使用这个typedef
为我的BGL的图型, Graph
,使用struct VertexProperty
作为捆绑顶点属性:
struct VertexProperty {
BeamType beam;
size_t index;
};
typedef typename boost::adjacency_list<
boost::listS,
boost::listS,
boost::bidirectionalS,
VertexProperty
> Graph;
在我的项目上进行了变更之前,我已经使用了VertexProperty::index
构建two_bit_color_map
与使用depth_first_search
:
auto colorMap = boost::make_two_bit_color_map(
boost::num_vertices(graph_),
get(&VertexProperty::index, graph_));
(该graph_
参数的类型的一个成员变量Graph
从上方)。 我最近的变化重新定意VertexProperty::index
存储从文件中读取一个顶点索引号,而不是我的代码自动生成。 我的代码之前已经创建这些指数为基础连续0指数,递增为每个新顶点加入到graph_
。 有了变化,我希望不再承担该指数是连续的,或者他们仍将小于graph_.size() - 1
; 我只是不希望把他们约束的用户。 但是,我继续使用Vertex::index
为属性为two_bit_color_map
,这导致了与消息的运行时断言失败:
Assertion failed!
Program: D:\school\thesis\code\build\test\bin\testChain.exe
File: D:\programming\lib\boost\boost_1_54_0/boost/graph/two_bit_color_map.hpp, Line 72
Expression: (std::size_t)i < pm.n
我知道我有VertexProperty::index
值是去高于或等于graph_.size()
; 我的结论正确,这是什么原因造成的断言失败? 我不能在BGL文档寻找是否有与使用的索引属性的任何这样的约束make_two_bit_color_map
。
所以,我的主要quesion是 :是否有可能同时使用内部性能,特别是property<vertex_index_t, int>
和捆绑的顶点属性与BGL的图,还是我坚持一个或其他? (我想在一个新成员避免再次实现连续指数VertexProperty
)。 我想这可能是这个样子,虽然可能有其他确切的语法:
typedef typename boost::adjacency_list<
boost::listS,
boost::listS,
boost::bidirectionalS,
property<vertex_index_t, int, property<VertexProperty>>
> Graph;