图形实现,使用邻接矩阵,链接中的自定义数据

时间:2013-12-22 08:40:24

标签: c++ graph

我想在我的链接中有一些自定义数据。考虑stLINK是一些结构,它提供链接数据。一种方法是将这种结构的指针放在矩阵中(如int,需要进行转换),另一种方法是创建链接向量,并将每个链接项的索引放在矩阵中。如果有标准方法,请帮助我。感谢

2 个答案:

答案 0 :(得分:0)

根据我的理解,你需要为每个边缘提供自定义数据,对吧?我使用矢量和地图来做到这一点。

struct data_t { 
 // any data you want to store for an edge
 int a,b,c; 
 string name;
};

std::vector< std::map<int, data_t> > adj;

这样可以更快地检查边缘是否存在。否则你可以使用std::vector<data_t>

答案 1 :(得分:0)

您尚未描述“自定义数据”和“链接”是什么。我会假设他们是上课。如果某些内容(此处为“链接”)应同时包含多种类型的数据,则应创建一个类。当然,你可以用C ++制作一个对象矩阵,不需要转换为int

  1. 如果您的“自定义数据”可以像“链接”那样一直存在,并且每个链接都有自己的“自定义数据”,最简单的方法是将数据添加到类链接中。

    class Link
    {
        customData_t data;
        // other useful attributes (and methods)
    };
    
  2. 您可以创建std::vector“自定义数据”。它将管理项目的创建和删除。访问随机元素的最快方法是知道它在内存中的位置 - 指针。我认为不需要任何强制转换为int。

    std::vector<customData_t> CustomData;
    
    class Link
    {    
        customData_t* data;
        // other useful attributes (and methods)
    };
    

    填写data

    Link l;
    customData_t temp;
    CustomData.push_back(temp);
    l.data = &(CustomData.back());
    

    (或者你可以在C ++ 11中使用vector::emplace_back()。)

    轻松访问:*l.data

    如果您希望跨多个“链接”共享相同的数据,或者如果要在“链接”的生命周期中添加/删除它们,这种方式会更好。