Boost图库:获取edge_descriptor或通过int类型的索引访问边

2024-03-05

我是一名 BGL 新手,有一个(可能)简单的问题:我有一个有向图并使用边缘的捆绑属性,其中之一是 int 类型的索引。知道唯一索引后,我想获取该边相应的edge_descriptor,以便对其执行操作。以下示例总结了我的问题:

#include <boost/graph/adjacency_list.hpp>

struct EdgeProperties {
    EdgeProperties(): distance(10), time_limit(5) {};
    int index;
    int distance;
    int time_limit;
};

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, boost::no_property, EdgeProperties> Graph;

int main() {

    Graph graph;

    EdgeProperties edge_prop1, edge_prop2, edge_prop3, edge_prop4;

    // Define edge properties
    edge_prop1.index = 0;
    edge_prop2.index = 1;
    edge_prop3.index = 2;
    edge_prop4.index = 3;

    // Add edges to graph
    boost::add_edge(0, 1, edge_prop1, graph);
    boost::add_edge(0, 2, edge_prop2, graph);
    boost::add_edge(1, 3, edge_prop3, graph);
    boost::add_edge(2, 3, edge_prop4, graph);

    // Get vertex_descriptor from an (int) index:
    int vertex_index = 2;
    boost::graph_traits<Graph>::vertex_descriptor v = boost::vertex(vertex_index, graph);

    // I would like to get an edge_descriptor from an (int) index property:
    // The following DOES NOT work:
    boost::graph_traits<Graph>::edge_descriptor e = boost::edge(edge_prop1.index, graph);
}

我也阅读了有关属性映射的信息,但找不到解决我的问题的方法。我会比较喜欢捆绑属性 http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/bundles.html超过内部属性。 有没有一种方法可以通过捆绑属性将唯一的 int 类型索引分配给边并通过这些 int 类型值访问边?


可悲的是,我不认为boost::graph在这里可以立即提供帮助。

首先,没有机制可以根据边缘属性的字段来查找边缘(或顶点) - BGL 保留任何此类映射,并且您拥有的“索引”字段完全用于您的目的。

其次,有boost::edges返回图所有边的迭代器范围的函数。我虽然你可以将 vecS 作为边缘容器类型传递给 adjacency_list 模板,然后查看这个范围内的内容,但是每个http://www.boost.org/doc/libs/1_61_0/libs/graph/doc/EdgeListGraph.html http://www.boost.org/doc/libs/1_61_0/libs/graph/doc/EdgeListGraph.html迭代器只需要是多遍输入迭代器,并且实现正是这样做的——即使使用 vecS 作为边缘类型,你也不能进行随机访问。

因此,似乎实现你想要的唯一方法就是保留你自己的unodered_map从索引到边缘描述符。

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

Boost图库:获取edge_descriptor或通过int类型的索引访问边 的相关文章

  • DispatcherTimer 未按时执行

    我正在使用 c 中的 DispatchTimer 编写一个时钟应用程序 但由于某些原因 我的时钟似乎时不时地跳过 1 秒 例如 52 秒 gt 54 秒 跳过 53 秒 在我看来 计时器并不是每秒都执行一次 DispatcherTimer
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • 将成员函数作为参数传递/c++

    我想用 C 实现一个类b可以通过封装该迭代器类型的成员集进行某种迭代 喜欢 b object for each x do function f so 函数 f会得到每个人的x成员并做任何事情 比方说 void function f x me
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • 有没有更好的方法来获取每个项目与谓词匹配的子序列?

    假设我有一个 IEnumerable 例如 2 1 42 0 9 6 5 3 8 我需要获得与谓词匹配的项目的 运行 例如 如果我的谓词是 bool isSmallerThanSix int number 我想得到以下输出 2 1 0 5
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面

随机推荐