通过 boost graph 将向量变量导出到图形

2024-02-23

我想导出一个存储字符串值序列的向量来增强图(点文件)。 。 最后四行可以解释问题/所需的帮助。我知道代码是错误的,但需要指导来解决这个问题。我想将向量 toponodedist2 存储到图形点文件。这里我想存储一个数组/向量,它将存储索引处的值序列,例如(image01,image02,iamge 03 ....)。稍后我将通过 write_graphviz_dp 将此向量导出到点文件。谢谢

#include<iostream>
#include<boost/graph/adjacency_list.hpp>
#include<boost/graph/graphviz.hpp>
#include<boost/graph/properties.hpp>
#include<boost/graph/property_maps/container_property_map.hpp>
#include<boost/graph/named_function_params.hpp>
#include <cstdlib>
#include<fstream>

struct VertexData
{

    std:: string image_path;
        int id;
    int image_num;
        std:: vector<std::vector<std::string>> toponodedist2;

};



int main(int,char*[])
{

    VertexData v11;


    std:: vector<std::vector<std::string>> toponodedist;
    std:: vector<std::string> toponodedist1;
    toponodedist1.push_back("this");
    toponodedist1.push_back("This is first node2");
    toponodedist1.push_back("This is first node3");
    v11.toponodedist2.push_back(toponodedist1);
    toponodedist.push_back(toponodedist1);
    toponodedist1.clear();
    toponodedist1.push_back("This is first node1");
    toponodedist1.push_back("This is first node2");
    toponodedist1.push_back("This is first node3");
    toponodedist.push_back(toponodedist1);
     v11.toponodedist2.push_back(toponodedist1);

    for(int i=0;i<=2;i++)
        for(int j=0;j<=2;j++)
        std::cout<< "this is "<<v11.toponodedist2[i][j]<<std::endl;

    /// mention vertex data in declaring adjacency list
    typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, VertexData,boost::no_property> MyGraphType;

    MyGraphType G;
    auto v1 =add_vertex(G);
    auto v2 =add_vertex(G);
    auto v3 =add_vertex(G);
    auto v4 =add_vertex(G);
    auto v5 =add_vertex(G);
    auto v6 =add_vertex(G);
    auto v7 =add_vertex(G);
    auto v8 =add_vertex(G);
    auto v9 =add_vertex(G);
        auto e1 =add_edge(v1,v2,G);
        auto e2 =add_edge(v2,v3,G);
        auto e3 =add_edge(v3,v4,G);
    auto e4 =add_edge(v4,v5,G);
        auto e5 =add_edge(v5,v6,G);
        auto e6 =add_edge(v7,v7,G);
        auto e7 =add_edge(v5,v2,G);
        auto e8 =add_edge(v1,v4,G);
        auto e9 =add_edge(v3,v7,G);
        auto e10 =add_edge(v2,v7,G);
        auto e11 =add_edge(v2,v6,G);
        auto vpair=vertices(G);
        int numberOfInEdges = boost::out_degree(8,G);

        std::cout<< "The number of vertices are  "<<numberOfInEdges; 
      ;

      std::ofstream dotfile1;
     dotfile1.open("dotgraph1.txt", std::ios::app);

      boost::dynamic_properties dp;

    dp.property("node_id", get(&VertexData::id, G));
// this is the place where I need help to export toponodeist2 to graph dot
 // file  ditfile1, but I am not able to do it. thanks    
dp.property("path_Ismage", get(&VertexData::toponodedist2, G));
/// the line need to be addressed

    boost::write_graphviz_dp(dotfile1,G,dp);
    dotfile1.close();

  return 0;
}

只需将属性转换为某种形式的字符串,例如:

dp.property("toponodedist", boost::make_transform_value_property_map(topo_attr, get(boost::vertex_index, g)));

例如

auto topo_attr = [&g](MyGraphType::vertex_descriptor const& v) {
    auto& vd = g[v];
    std::string s;
    for (auto& row : vd.topo) {
        for (auto& el : row) s += el + " ";
        s += '\n';
    }
    return s;
};

Live On Coliru http://coliru.stacked-crooked.com/a/5df68f73b577d542

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/property_map/transform_value_property_map.hpp>
#include <fstream>
#include <iostream>
#include <sstream>

using string_table = std::vector<std::vector<std::string>>;

struct VertexData {
    std::string image_path;
    int id;
    int image_num;
    string_table topo;
};

int main(int, char *[]) {

    /// mention vertex data in declaring adjacency list
    typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, VertexData>
        MyGraphType;

    MyGraphType g(9);
    add_edge(0, 1, g);
    add_edge(1, 2, g);
    add_edge(2, 3, g);
    add_edge(3, 4, g);
    add_edge(4, 5, g);
    add_edge(6, 6, g);
    add_edge(4, 1, g);
    add_edge(0, 3, g);
    add_edge(2, 6, g);
    add_edge(1, 6, g);
    add_edge(1, 5, g);

    std::srand(time(0));
    auto gen_topo = []() -> string_table {
        auto ranch = [] { return std::string(1, rand()%26 + 'a'); };
        return {
            { ranch(), ranch(), ranch() },
            { ranch(), ranch(), ranch() },
            { ranch(), ranch(), ranch() },
        };
    };

    for (auto v : boost::make_iterator_range(boost::vertices(g))) {
        auto& data = g[v];
        data.id = v;
        data.topo = gen_topo();
    }

    std::cout << "out-degree: " << boost::out_degree(8, g);

    {
        std::ofstream dotfile;
        dotfile.open("dotgraph.txt");

        boost::dynamic_properties dp;

        dp.property("node_id", get(&VertexData::id, g));

        auto topo_attr = [&g](MyGraphType::vertex_descriptor const& v) {
            auto& vd = g[v];
            std::string s;
            for (auto& row : vd.topo) {
                for (auto& el : row) s += el + " ";
                s += '\n';
            }
            return s;
        };

        dp.property("toponodedist", boost::make_transform_value_property_map(topo_attr, get(boost::vertex_index, g)));

        boost::write_graphviz_dp(dotfile, g, dp);
    }
}

点图看起来像:

graph G {
0 [toponodedist="q c i 
z a e 
o x c 
"];
1 [toponodedist="i u t 
c i l 
s k w 
"];
2 [toponodedist="z q m 
q j l 
n o t 
"];
3 [toponodedist="u k q 
g d u 
o c v 
"];
4 [toponodedist="u t s 
w d n 
r g x 
"];
5 [toponodedist="e y h 
b x z 
n q i 
"];
6 [toponodedist="a f y 
w z j 
m f o 
"];
7 [toponodedist="g v s 
d r l 
w o p 
"];
8 [toponodedist="l h x 
i m x 
s n v 
"];
0--1 ;
1--2 ;
2--3 ;
3--4 ;
4--5 ;
6--6 ;
4--1 ;
0--3 ;
2--6 ;
1--6 ;
1--5 ;
}

Demo Viz

只需使用label属性而不是toponodedest使其显示在标准点渲染上:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 boost graph 将向量变量导出到图形 的相关文章

随机推荐

  • cplex boolVarArray 给出双精度值

    我一直在尝试使用 CPLEX Java 实现 ILP 并且长期以来一直被一个问题困扰 以下是 ILP 的几个变量 IloIntVar above new IloIntVar numRect IloIntVar below new IloIn
  • 酿造安装 nvm。 nvm:找不到命令

    使用brew安装nvm并运行后nvm 它说nvm command not found 我怎样才能得到要执行的命令 使用brew 安装nvm 有两个步骤 首先使用brew安装应用程序 brew install nvm 然后查看brew 信息的
  • 我可以使用ASP.Net Core 3.0中的IEmailSender接口向多个接收者发送电子邮件吗

    我是 ASP Net core 的初学者 实际上我正在使用 ASP Net Core 3 0 我想向多个收件人发送电子邮件 我可以使用IEmailSender接口吗 或者有什么建议吗 我的 IEmailSender 实现是这样的 publi
  • 根据太阳位置(方位角和仰角)以及纬度和经度计算日期和时间

    与此相关非常有帮助question https stackoverflow com questions 8708048 position of the sun given time of day latitude and longitude
  • 应包含哪个 aSmack jar 文件(android-14、android-15...)以支持 SDK 版本 14-19?

    我陷入了两个不同的错误之间 无法实例化活动 ComponentInfo https stackoverflow com questions 16610296 android unable to instantiate activity cl
  • 为什么rvm需要登录shell?

    据我所知 rvm是一组bash脚本 为什么需要登录 shell 哪些仅存在于登录 shell 中的属性对于 rvm 是必需的 相关帖子 rvm 安装无法正常工作 RVM 不是一项功能 https stackoverflow com ques
  • Kafka 生产者超时异常

    我正在运行 Samza 流作业 将数据写入 Kafka 主题 Kafka 正在运行一个 3 节点集群 Samza 作业部署在纱线上 我们在容器日志中看到很多这样的异常 INFO 2018 10 16 11 14 19 410 U 2 151
  • 为什么这个类对象声明有效?

    假设我有一堂课 class Test public int x Test const Test obj x obj x 为什么 Test object name Test random name 运行并且不需要另一个对象作为参数 就像是Te
  • 何时在 golang 中使用劫持?

    我不明白为什么我们使用劫持 因为我可以直接在响应正文中写入一些内容 有人可以解释一下吗 func writeSome w http ResponseWriter r http Request fmt Fprintf w write some
  • 如何使用 JavaScript 检测 CSS 动画何时开始和结束?

    我习惯于使用 JavaScript 为元素添加动画 我发现使用 CSS3 更简单 使用 JavaScript 如何检测 CSS 动画何时开始和何时结束 有什么办法吗 将适当的事件绑定到元素 例如 el addEventListener an
  • 如何为将 Gmail 作为默认邮件处理程序的用户在新选项卡中打开 mailto 链接?

    在网页上 mailto 链接会打开默认的电子邮件客户端 现在 Chrome 提供了将 Gmail 设置为默认电子邮件客户端的功能 一些用户在同一窗口中打开了链接 从而使他们离开了单击链接的页面 他们不喜欢这样 我尝试将目标 blank添加到
  • 列表视图中每一行的背景

    我正在尝试定制一个ListView为每一行设置默认背景图像和突出显示的背景图像 但是 突出显示的背景图像影响单行 而默认背景图像影响整行ListView 但我需要它影响每一行 有人可以告诉我该怎么做吗 这是我的代码 布局 main xml
  • matplotlib imshow():如何制作动画?

    我发现了这个精彩的动画简短教程 http jakevdp github io blog 2012 08 18 matplotlib animation tutorial http jakevdp github io blog 2012 08
  • 将 MySQL 架构作为 CoreData 数据模型导入 Xcode

    我有一个现有的 MySQL 数据库 我想将架构导入 Xcode 并创建一个核心数据 http developer apple com macosx coredata html数据模型 有没有办法 工具 流程 来导入CREATE声明 这样我就
  • C++11 是否允许向量

    容器要求已从 C 03 更改为 C 11 虽然 C 03 具有全面的要求 例如向量的复制构造性和可分配性 但 C 11 定义了每个容器操作的细粒度要求 第 23 2 节 因此 您可以例如 只要您只执行某些不需要赋值的操作 构造和push b
  • 如何删除没有本地跟踪分支的远程分支?

    如何在没有本地跟踪分支的情况下删除所有远程分支 我有大约 30 个没有本地分支 已删除 的远程分支和 20 个跟踪到远程的本地分支 我找到了几篇关于如何做相反的事情的帖子 编辑 寻找一个单行来解决这个问题 这样我就不必手动一一删除这些分支
  • 404 Page Not Found 您请求的页面未找到。代码点火器[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在 co
  • 从投影仪闪光灯执行外部 exe

    我们有一个从 AS3 编译的投影仪应用程序 exe 我们如何从投影仪启动另一个 外部 可执行文件 这是代码 它没有做任何可见的事情 Play ACQ Demo Acq addEventListener MouseEvent CLICK cl
  • JavaFX 媒体播放器不播放视频

    Using OpenJFX 11我正在使用媒体播放器在 Linux 系统上播放一些剪辑 其中一些显示 另一些则不显示 据我所知 编码的唯一区别是 未播放的视频包含音轨 这是的输出mediainfo对于播放的视频 General Comple
  • 通过 boost graph 将向量变量导出到图形

    我想导出一个存储字符串值序列的向量来增强图 点文件 最后四行可以解释问题 所需的帮助 我知道代码是错误的 但需要指导来解决这个问题 我想将向量 toponodedist2 存储到图形点文件 这里我想存储一个数组 向量 它将存储索引处的值序列