gpt4 book ai didi

c++ - 通过 boost::read_graphviz() 读取 boost 动态属性时出现异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:24 41 4
gpt4 key购买 nike

我已经问了question关于如何将动态属性写入 DOT 文件。它工作正常。现在,当我尝试读取 DOT 文件并构建我的图表时,出现了一些异常。基本上我按照类似写作的方式来读取 DOT 文件。以下是我尝试过的:

我有一个 Map 类,它使用 Cell 类作为顶点,而 Cell 类使用一个单独的 CellProperty 类来设置和获取所有 Cell 属性。请参阅链接的问题以了解整个类结构。

  boost::dynamic_properties mPropertiesR(boost::ignore_other_properties);
mPropertiesR.property("ID", boost::get(boost::vertex_index, mGraph));

auto valueNavigable = boost::make_transform_value_property_map(
[](Cell &cell) { return cell.GetProperty<bool>("Navigable", false); }, boost::get(boost::vertex_bundle, mGraph));
mPropertiesR.property("Navigable", valueNavigable);

std::ifstream fin(mGraphFilePath.c_str());
std::string const &node_id = "node_id";
boost::read_graphviz(fin, mGraph, mPropertiesR, "node_id");

boost::graph_traits<Graph>::vertex_iterator vi, vi_end, next;
boost::tie(vi, vi_end) = boost::vertices(mGraph);
for (next = vi; vi != vi_end; vi = next) {
// cell.GetProperty() is a templated method the takes a default parameter, thus passing "false" bool parameter which returns the "Navigable" cell property
std::cout<< ": The Navigable property set to :" << mGraph[*next].GetProperty<bool>("Navigable", false);
++next;
}

上面的代码可以编译,但出现异常:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::dynamic_const_put_error> >'
what(): Attempt to put a value into a const property map:
Aborted (core dumped)

GetProperty() 方法使用 CellProperty 类来获取每个单元格的属性值。 GetProperty() 方法如下所示:

  template <class T>
T GetProperty(std::string pPropertyName, T pDefaultValue = T()) {
try {
T propertyValue = boost::lexical_cast<T>( mCellProperty.GetPropertyString(pPropertyName, boost::lexical_cast<std::string>(pDefaultValue)));
return propertyValue;
} catch (...) {
std::cout<< ": Unknown exception thrown while getting cell property value :'" << pPropertyName << "'";
}
return pDefaultValue;
}

我想要的是检索我从 DOT 文件中读取的图形中的顶点属性,例如“可导航”属性等。我不知道,我到底做错了什么。请帮我。提前致谢!

最佳答案

I am not particularly sure what modifications should be done to my GetProperty() method.

我已经 said this before :

Also, note how including the stuff in the lambda (cell.GetProperty<bool>("Navigable", false);) was crucial, no one could make that up for you, because the information just wasn't there.

我们不知道如何编写它,因为您没有首先展示如何访问该属性

这里也是一样。我会给你另一个指示。

您需要实现 ReadWritePropertyMap 的模型或 LvaluePropertyMap 用于可变属性映射。

有关如何实现读写属性映射的示例,请参阅此答案:查找 property_traits<bidi_color_map>putget功能:

关于c++ - 通过 boost::read_graphviz() 读取 boost 动态属性时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34314531/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com