无需邻接列表或邻接矩阵的Boost图设计[关闭]

2024-03-05

有没有办法在 C++ boost 中不使用邻接列表或邻接矩阵来创建图结构? (使用指向其邻居顶点的指针的顶点结构)


当然,只要您的数据具有理论图的“特征”,这意味着您本质上处理“顶点”和“边”,即使在您的代码中它们被称为“节点”和“链接” 。

该构造称为“BGL 图形适配器”。不过,这可能是一个有点具有挑战性的 C++ 练习。总体思路是向 BGL 传授有关数据的许多详细信息:

  1. 你的数据的 C++ 类型在你的想象图中意味着什么
  2. 如何迭代顶点和边。

因此,您定义一个类,例如 MyGraph,它通常是一个非常轻量级的类,只保留很少的指向数据的指针。然后,您可以通过提供 BGL 的模板专业化来定义其特征graph_traits:

#include <boost/graph/graph_traits.hpp>
namespace boost {
    template <>
    struct graph_traits<MyGraph> 
{
    typedef ... vertex_descriptor; //what plays a role of vertex in your data
    typedef ... edge_descriptor; //what plays a role of edge in your data

    //other typedefs from graph_traits like edge_iterator, out_edge_iterator, etc.

    //plus, you specify "categories" of your graph explaining what types of traversal are
    //available (more the better)
    struct traversal_category
        : public virtual boost::vertex_list_graph_tag
        , public virtual boost::adjacency_graph_tag
        , public virtual boost::bidirectional_graph_tag //means we provide access to in_edges
                                                        //and to out_edges of a given vertex
    {
    };    
};
}

之后,您实现全局函数,提供对图形结构的访问和迭代器,例如:

MyGraph::vertex_descriptor 
source(MyGraph::edge_descriptor e, const MyGraph & g); 

and

std::pair<MyGraph::out_edge_iterator,
          MyGraph::out_edge_iterator>
out_edges(MyGraph::::vertex_descriptor vd, const MyGraph & g )

中预定义了大约几十个这样的遍历函数BGL 图概念 http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/graph_concepts.html。您必须至少提供与您相关的内容traversal_category上面声明的。

如果一切正确,您可以直接通过 BGL 算法使用数据,而无需使用预定义的 BGL 图表之一。

BGL 章节对此主题给出了很好的解释如何将现有图形转换为 BGL http://www.boost.org/doc/libs/1_53_0/libs/graph/doc/leda_conversion.html

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

无需邻接列表或邻接矩阵的Boost图设计[关闭] 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 属性的索引值

    我正在使用以下代码 for i 0 i lt 90 i gt a href Text Shown a 我想知道当用户点击 a href 时它的 id 类似 read 1 read 2 等 a click function e alert t
  • Sourcetree 中签出现有分支和签出新分支之间的区别

    在 sourcetree 中 我只想签出远程开发分支 以便我可以在其中启动一个新功能分支 我目前处于另一个功能分支 我已在其中提交并推送了所有更改 However when I right click on remote branch or
  • 通过 javascript 登录的 Keycloak 多租户实施(网页)

    我想在 keycloak 中将不同的领域分配给不同的客户 组织 keycloak 的登录是通过一个网页实现的 该网页从 keycloak 获取有效令牌 然后将其与我从网站发出的其余请求一起传递 现在 javascript 适配器需要一个 k
  • 帮助将 jQuery 脚本变成插件

    Easy All 由于我最近一直在学习 jQuery 我决定编写自己的模态窗口来在单击视频缩略图时播放视频 一切都很好 但我只是想知道如何将它变成一个插件 这样我就可以在具有不同参数的不同页面上使用它等 我阅读了文档和一些教程 但我似乎无法
  • TableViewCell 在 iOS 6 中显示不正确

    我在显示时遇到一个烦人的问题UITableViewCell with UIActivityIndicatorView里面 我的 tableView 委托加载部分数据 最后一个单元格始终指示加载过程 而新部分未加载 加载开始于tableVie
  • Chrome 扩展 - 使用 JQuery 触发 content_scripts 事件

    我编写了一个 Chrome 扩展程序 可以自动填写一些注册表单 有一些选择字段需要在 上触发change 事件以启动一些 Ajax 调用 首先 我使用 JQuery attr 或 val 更改选择字段的值 然后使用 trigger调用 ch
  • 在 ssh 会话中启用 tty

    我想获取一些已写入脚本以供许多用户使用的登录信息 在 python 中 我将 input raw 设置为从 dev tty 读取 但是当我通过 ssh 连接到服务器上运行的脚本时 它会严重失败 想法 解决方法 我希望避免将用户名硬编码到脚本
  • 粘性表格标题在有角度的材料 mat-sidenav-container 中不起作用

    Heyho 使用角度材料时 我在 html css 表和粘性标题方面遇到一些问题 在我的项目中 我使用有角度的材料 sidenav
  • 用于按数字部分对字母数字字符串进行排序的 SQL

    我有一个 MySQL 表 其中有一个 VARCHAR 列 其中包含如下值 abc 1 abc 2 abc 10 etc 有没有办法在MySQL中按顺序中的数字部分对其进行排序 abc 1 abc 2 代替 abc 1 abc 10 abc
  • 如何从格式字符串提供自定义格式?

    我可以使用自定义类来扩展 Python 的字符串格式 class CaseStr str def format self fmt if fmt endswith u s self upper fmt fmt 1 elif fmt endsw
  • 如何使用Java防止XSS攻击或Rest API JSON中的不可信数据?

    我开发了一个 Rest API 应用程序 并使用自定义 JWT 处理身份验证和授权 我想进一步确保应用程序免受 XSS 攻击或验证不受信任的数据 这些数据可以针对 JSON 请求的每个字段进行处理 我可以在这方面获得一些帮助 以便在请求的入
  • 如何将Excel值转换为桶?

    我在 Excel 中有一组数据 其中一列是估计值 周数 我想要一个 Excel 公式来将其放入 Small Medium Large 如果该值为 0 10 则将其设置为 小 如果值为 10 20 则将其置于 Medium 等中 除了将所有
  • 没有适用于以下版本的二进制红宝石:osx/10.8/x86_64/ruby-1.9.2-p320

    有一篇两年前的博客文章here http www fakingfantastic com 2010 11 26 20 fixing the you have to install development tools first error
  • Jenkins 管道按顺序构建多个项目?

    对于詹金斯来说 我是一个新手 我希望能够采用不同的项目并通过管道按顺序构建它们 我注意到 Jenkins 可以通过管道按顺序或并行运行各个阶段 有没有办法通过顺序或并行运行同一节点上的项目来实现这种情况 我知道这个问题有点老了 但如果有人可
  • 随机“[Errno -2]名称或服务未知”错误

    我正在使用第三方服务填充本地数据库 我有一个网址列表 大约 500 个 我在循环中调用每个网址 并使用返回的数据更新我的数据库 代码流程如下所示 for url in urllist req urllib urlopen url data
  • ZF2 getServiceLocator() 未找到?

    我一生都无法让 this gt getServiceLocator 在我的控制器中工作 我已经阅读并尝试了一切 我猜我错过了什么 这是一些代码 namespace Login Controller use Zend Mvc Controll
  • google cloud dataflow (apache beam)可以使用ffmpeg来处理视频或图像数据吗

    数据流进程可以使用 ffmpeg 处理视频或图像吗 如果可以 示例工作流程会是什么样子 是的 您可以使用以下命令确保工作人员可以使用必要的二进制文件 及其依赖项 filesToStage 管道选项 https cloud google co
  • Python:在大型字符串语料库中查找部分字符串匹配

    我对在 Python 中实现自动完成很感兴趣 例如 当用户输入字符串时 我想显示磁盘上名称以该字符串开头的文件子集 在大型语料库 例如几十万个字符串 中查找与某些条件匹配的字符串的有效算法是什么 就像是 matches s for s in
  • 如何增加标签和图表区域之间的空间?

    我所有的标签都在栏的顶部 我可以看到这个 but I want that would be like this 填充不适用于税费 但适用于税费 legend display false scales xAxes position top s
  • 无需邻接列表或邻接矩阵的Boost图设计[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有办法在 C boost 中不使用邻接列表或邻接矩阵来创建图结构 使用指向其邻居顶点的指针的顶点结构 当然 只要您的数据具有理论图的