我想在我的链接中有一些自定义数据。考虑stLINK是一些结构,它提供链接数据。一种方法是将这种结构的指针放在矩阵中(如int,需要进行转换),另一种方法是创建链接向量,并将每个链接项的索引放在矩阵中。如果有标准方法,请帮助我。感谢
答案 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
。
如果您的“自定义数据”可以像“链接”那样一直存在,并且每个链接都有自己的“自定义数据”,最简单的方法是将数据添加到类链接中。
class Link
{
customData_t data;
// other useful attributes (and methods)
};
您可以创建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
如果您希望跨多个“链接”共享相同的数据,或者如果要在“链接”的生命周期中添加/删除它们,这种方式会更好。