Graph 图形中的顶点数据类型

Graph 图形中的顶点数据类型,graph,types,vertex,graphchi,Graph,Types,Vertex,Graphchi,我们可以将字符串作为顶点数据类型;有人提到,我们不能使用动态数据类型,但假设我想继续向顶点添加一些数据,我该怎么做? 我曾考虑使用数组,但大小不详;那么使用字符串会导致任何问题吗?(我将继续连接到字符串)尽管明确禁止非POD类型(不允许std::vector、std::string等),但似乎可以使其工作(基于编译器和运行时在rev.278中报告的错误): 确保您的类型具有默认构造函数 实现专门针对您的类型的graphchi::parse()模板函数 例如,(ab)使用向量存储singlul

我们可以将字符串作为顶点数据类型;有人提到,我们不能使用动态数据类型,但假设我想继续向顶点添加一些数据,我该怎么做? 我曾考虑使用数组,但大小不详;那么使用字符串会导致任何问题吗?(我将继续连接到字符串)

尽管明确禁止非POD类型(不允许
std::vector
std::string
等),但似乎可以使其工作(基于编译器和运行时在rev.278中报告的错误):

  • 确保您的类型具有默认构造函数
  • 实现专门针对您的类型的
    graphchi::parse()
    模板函数
例如,(ab)使用向量存储singlular int(免责声明:编写示例是为了概念验证,而不是为了效率):

类顶点数据
{
std::矢量数据;
公众:
//默认选择器
VertexData()
{
setData(0);
}
//便利型电动自行车
顶点数据(int v)
{
setData(v);
}
无效设置数据(int v)
{
data.clear();
数据。推回(v);
}
int getData()
{
返回数据。在(0);
}
};
名称空间图
{
模板
无效解析(顶点数据与虚拟磁盘,常量字符*s)
{
//注意:stoi是C++11特性,如果需要,请使用您最喜欢的C++03等效工具
INTX=标准::stoi(s);
vd.setData(x);
}
}
请注意,默认的二进制输出(*.vout)将写入VertexData本身的二进制内容,这意味着在
向量
和其他动态数据类型(因此文档禁止)的情况下使用原始指针。要查看实际值,请按照中的说明操作(使用带有输出函子的
graphchi::foreach_顶点()

更新

尽管上述方法似乎可行,但出于以下原因,不应使用该方法:

  • 动态内存处理需要将所有数据放入内存中,对于大型数据集可能不是这样
  • 由于顶点和边对象写入磁盘/从磁盘读取的方式,无法保证对任何顶点/边对象调用析构函数,这可能(至少)导致资源(例如内存)泄漏
简而言之:文档中有很好的理由禁止这种方法。

虽然明确禁止非POD类型(不允许
std::vector
std::string
等),但似乎可以让它工作(基于编译器和运行时在rev.278中报告的错误):

  • 确保您的类型具有默认构造函数
  • 实现专门针对您的类型的
    graphchi::parse()
    模板函数
例如,(ab)使用向量存储singlular int(免责声明:编写示例是为了概念验证,而不是为了效率):

类顶点数据
{
std::矢量数据;
公众:
//默认选择器
VertexData()
{
setData(0);
}
//便利型电动自行车
顶点数据(int v)
{
setData(v);
}
无效设置数据(int v)
{
data.clear();
数据。推回(v);
}
int getData()
{
返回数据。在(0);
}
};
名称空间图
{
模板
无效解析(顶点数据与虚拟磁盘,常量字符*s)
{
//注意:stoi是C++11特性,如果需要,请使用您最喜欢的C++03等效工具
INTX=标准::stoi(s);
vd.setData(x);
}
}
请注意,默认的二进制输出(*.vout)将写入VertexData本身的二进制内容,这意味着在
向量
和其他动态数据类型(因此文档禁止)的情况下使用原始指针。要查看实际值,请按照中的说明操作(使用带有输出函子的
graphchi::foreach_顶点()

更新

尽管上述方法似乎可行,但出于以下原因,不应使用该方法:

  • 动态内存处理需要将所有数据放入内存中,对于大型数据集可能不是这样
  • 由于顶点和边对象写入磁盘/从磁盘读取的方式,无法保证对任何顶点/边对象调用析构函数,这可能(至少)导致资源(例如内存)泄漏

简而言之:文档中有充分的理由禁止这种方法。

最近将动态向量作为顶点数据类型的有限支持添加到Graphchi中:

最近将动态向量作为顶点数据类型的有限支持添加到Graphchi中:

class VertexData
{
  std::vector<int> data;

public:
  // default ctor
  VertexData()
  {
    setData(0);
  }

  // convenience ctor
  VertexData(int v)
  {
    setData(v);
  }

  void setData(int v)
  {
    data.clear();
    data.push_back(v);
  }

  int getData()
  {
    return data.at(0);
  }
};

namespace graphchi
{
  template<>
  void parse<VertexData>(VertexData& vd, const char* s)
  {
    // NOTE: stoi is C++11 feature, use your favorite C++03 equivalent if needed
    int x = std::stoi(s);
    vd.setData(x);
  }
}