首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bgl中的edge_descriptor映射

bgl中的edge_descriptor映射
EN

Stack Overflow用户
提问于 2012-11-21 16:20:31
回答 1查看 707关注 0票数 3

我是BGL的新手,我在制作自己的属性映射时遇到了问题,这个映射的关键字是edge_property

你能告诉我我做错了什么吗,下面的代码没有打印:(0,1) == (0,1)?1但是(0,1) == (0,1)?0

以下是代码

代码语言:javascript
运行
复制
#include <boost/graph/adjacency_list.hpp>
#include <iostream>
#include <map>

using namespace std;


class A {};
class B {};

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::bidirectionalS,
                                    A, B > Graph;

typedef boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef boost::graph_traits<Graph>::edge_iterator edge_iterator;
typedef boost::graph_traits<Graph>::in_edge_iterator in_edge_iterator;
typedef boost::graph_traits<Graph>::out_edge_iterator out_edge_iterator;

map<edge_descriptor, int>  fun(Graph g){

    map<edge_descriptor, int> m;
    m[*(edges(g).first)] = 5;
    return m;
}


int main(){
    Graph g;

    vertex_descriptor a = add_vertex(g);
    vertex_descriptor b = add_vertex(g);

    add_edge(a, b, g);

    map<edge_descriptor, int> m = fun(g);

    edge_iterator ei, ei_end;
    for(tie(ei, ei_end) = edges(g) ; ei !=ei_end ; ++ei){
        cout << m.begin()->first << " == " << *ei << " ? " << (m.begin()->first == *ei) << endl;
    }
}

非常感谢!

编辑:也许有一种比通过edge_property值更好的方法来映射边缘?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 01:47:32

您的边描述符有3个成员:源节点、目标节点和指向B属性的指针。在您的fun中,您复制了您的图形,并且新图形中复制的边指向不同的B。如果您将fun声明为map<edge_descriptor, int> fun(const Graph& g) (您可能应该这样做,因为复制一个更大的图形可能会很昂贵),您将获得预期的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13488994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档