- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个这样定义的图表:
struct EdgeInfoProperty{
int score;
//is the trans from v to u, where u<v
Trans trans;
};
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS, boost::no_property, EdgeInfoProperty > Graph;
typedef Graph::edge_descriptor Edge;
typedef Graph::vertex_descriptor Vertex;
我使用 write_graphviz
将边 + 分数写入文件(我正在单独编写 Trans,所以我只想在读取点文件时读取分数)。我是这样写的:
auto w_map = boost::get(&EdgeInfoProperty::score, G); // <=== THIS IS THE TRICK!!!
boost::write_graphviz(myfile, G, boost::default_writer(), make_edge_writer(w_map));
我的点文件看起来像:
graph G {
0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
10;
11;
12;
0--1 [label="-3"];
0--5 [label="-2"];
2--3 [label="-8"];
3--8 [label="-4"];
4--5 [label="-1"];
4--6 [label="-6"];
4--7 [label="-5"];
4--8 [label="-10"];
8--9 [label="-9"];
}
所以,我基本上想加载 G,以便在 0--1 等之间有一个边,使用 G[edge].score = -3
等和 G[edge] .trans =//一些默认值或其他值
。
我现在拥有的东西给了我大量的编译错误,我正在认真考虑只制作我的图形的纯文本拷贝,而不是尝试读取点文件,然后从那里重新创建图形...
这是我所拥有的:
std::string gn = loc + "MST.dot";
Graph G(0);
boost::dynamic_properties dp;
boost::property_map<Graph, boost::vertex_name_t>::type name = boost::get(boost::vertex_name, G);
dp.property("node_id",name);
auto score = boost::get(&EdgeInfoProperty::score, G);
dp.property("score",score);
std::filebuf fb;
fb.open (gn, std::ios::in);
std::istream isg(&fb);
bool status = boost::read_graphviz(isg,G,dp,"node_id");
我很确定只有分数是个问题,但我已经尝试获取 EdgeInfoProperty 映射,只是我尝试的所有操作都出错了...
最佳答案
问题
你的代码有几个错误:
boost::get(boost::vertex_name,G)
假定您的顶点中有一个名为 name 的属性,但事实并非如此。此外,read_graphviz()
将节点标识符存储到名为 node_id
的属性映射中。但在你的情况下,你没有顶点的属性。它无法工作。
一个运行示例
#include <iostream>
#include <sstream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/breadth_first_search.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/property_map/dynamic_property_map.hpp>
using namespace std;
struct Trans {
int t;
};
struct EdgeInfoProperty {
int score;
//is the trans from v to u, where u<v
Trans trans;
};
struct NodeInfoProperty {
int index;
};
/* you cannot read a graph without node property. By default, read_graphviz() assume
* nodes have a "node_id" property map...
*/
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS, NodeInfoProperty, EdgeInfoProperty > Graph;
template<class Index> class noeud_writer {
public:
noeud_writer(Index id) : idm(id){}
template<class Noeud> void operator()(std::ostream & out, const Noeud & n) {
out << "[index=" << idm[n] << "]"; }
private:
Index idm;
};
template< class IdMap> inline noeud_writer<IdMap> make_noeud_writer(IdMap idm) {
return noeud_writer<IdMap>(idm); }
template<class Score> class edge_writer {
public:
edge_writer(Score s) : score(s){}
template<class Noeud> void operator()(std::ostream & out, const Noeud & n) {
out << "[score=" << score[n] << "]"; }
private:
Score score;
};
template< class Score> inline edge_writer<Score> make_edge_writer(Score score) {
return edge_writer<Score>(score); }
int main(int argc, char * argv[])
{
Graph G(0);
boost::dynamic_properties dp;
dp.property("index", boost::get(&NodeInfoProperty::index,G));
auto score = boost::get(&EdgeInfoProperty::score, G);
dp.property("score", score);
std::istringstream isg("graph G {0[index=0];1[index=1];0--1[score=-3];}");
bool status = boost::read_graphviz(isg, G, dp,"index");
write_graphviz(std::cout, G, make_noeud_writer(boost::get(&NodeInfoProperty::index, G)),
make_edge_writer(boost::get(&EdgeInfoProperty::score, G)));
return 0;
}
关于c++ - 使用捆绑属性 boost BGL read_graphviz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196112/
我有一个要提交的 iOS 应用程序,我的应用程序在我的 iPhone 上运行。我将 apple id 帐户添加到 Xcode 并在 Xcode 的常规部分下输入我的 bundle id,然后单击“修复
我有一个SDK项目,它在gradle中引用了很多依赖项。我必须要求SDK用户在项目中使用SDK时添加这些依赖项。问题是,每当我添加一些新的依赖项或将当前的依赖项替换为新的依赖项时,我都必须要求用户进行
我使用 Microsoft.AspNet.Web.Optimization用于 css 和 js 捆绑和缩小的 nuget 包。 我在这个路径 ~/bundles/shared.css 中创建了一个包
我使用 laravel-mix(包括 webpack)来打包 JS 文件。使用 BundleAnalyzerPlugin,我发现我的输出文件包含多个 JQuery 库副本,这增加了输出文件的大小。 它
我正在使用 maven felix 插件来创建 OSGi 包,但是假设您有一个包“com.example”存在于project1和project2中。此外,project2 依赖于 project1。
当我尝试捆绑我的 Meteor 应用程序时,我得到: $ meteor bundle app.tgz Errors prevented bundling: Exception while bundli
因此查看 bundleconfig.cs 它应该允许基于设备类型进行捆绑。唯一的问题是因为它在 App_Start 中,所以不允许我访问 Request 对象。有什么想法可以实现基于设备的捆绑吗? 最
上下文 http://news.ycombinator.com/item?id=4125530 问题: 这是否最终意味着 Java 应用程序将能够发布到 Mac 商店? (因为 JRE 自动捆绑到应用
我正在尝试为一个 React/Redux 项目创建我自己的 Webpack 配置。配置看起来很好,但是包的大小很大(在开发模式下,我知道如何在生产模式下减少它) 我的 package.json 看起来
所以我一直收到这个 Bundle ID 错误,说它不可用而且我真的不知道如何修复它。这是错误: 提供的数据有误。请更正并重新提交。标识符为“com.team.AppName”的 App ID 不可用。
我正在浏览 SO 并找到了 some code这向我提出了一个问题。 struct node* BuildOneTwoThree() { struct node *list = malloc(3 *
我正在为 Delphi XE7 使用 intraweb XIV 捆绑版。当我在这个新的捆绑版本中测试一个 intraweb XII 应用程序时,SSL/TLS 不工作。捆绑版本不支持 SSL/TLS?
预期: 当我使用 webpack 构建时,我的所有 JS 文件都会被捆绑,除了 ./src/Portfolio 目录中的文件(根据我的 Webpack.config.js 设置)。 实际: Webpa
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
我有一个项目引用了许多开源库,有些是新的,有些不是很新。也就是说,它们都很稳定,我希望坚持使用我选择的版本,直到我有时间迁移到更新的版本(我昨天测试了 hsqldb 2.0,它包含许多 api 更改)
我正在创建一个 REST API,并且我一直在研究允许捆绑来自客户端的请求的想法。我所说的捆绑是指他们可以发送一个包含多个“真实”请求的请求,然后将它们一起交付给客户。通常是 javascript a
在我的 AngularJS 项目中,我有一个 HTML 模板,其中 innerText 位于新行中: Click here 我正在使用 webpack 作为我的捆绑器。我希望它 trim
我已经为我的应用程序创建了一个静态库。现在,我的应用程序使用我在应用程序中引用的 plists 和图像等来源。 如何捆绑这些图像并将它们与静态库一起交付,以及我需要在源加载代码中进行哪些更改才能从该
所以, 我是 webpack 的新手,我正在开发一个项目,在该项目中我们只加载一个文件 bundle.js,我知道我可以单独加载文件。 但我想要的是bundle.js中未缩小的文件。目前我正在获取缩小
如何使用用户区域设置登录路径?我试过了 check_path: /{_locale}/login_check 和 check_path: /(en|ru)/login_check 但什么也没有
我是一名优秀的程序员,十分优秀!