我们可以将字符串作为顶点数据类型;有人提到我们不能使用动态数据类型但是我想继续向顶点添加一些数据我该怎么办? 我在考虑使用数组但是大小未知;那么使用字符串会导致任何问题吗? (我将继续连接到字符串)
答案 0 :(得分:1)
虽然documentation明确禁止非POD类型(禁止std::vector<>
,std::string
等),但似乎可以使其有效(基于由报告的错误报告的错误)第278页中的编译器和运行时:
graphchi::parse<>()
模板功能例如,(ab)使用向量来存储单元int(免责声明:为概念证明而非效率而编写的示例):
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);
}
}
请注意,默认的二进制输出(* .vout)将写入VertexData本身的二进制内容,这意味着vector<>
和其他动态数据类型的原始指针(因此文档的禁止)。要查看实际值,请按照this SO thread中的说明操作(使用带有输出仿函数的graphchi::foreach_vertices<>()
)。
<强>更新强>
虽然上述方法似乎有效,但不应将其用于多种原因,包括:
简而言之:文档有充分的理由禁止这种方法。
答案 1 :(得分:0)
最近向Graphchi添加了对动态矢量作为顶点数据类型的有限支持:http://code.google.com/p/graphchi/wiki/DynamicVertexData