【发布时间】:2015-11-03 20:37:51
【问题描述】:
我有一个类似于以下内容的文本文件:
person: head, body
head: eyes, nose, ears, mouth
body: arm, leg
arm: elbow, hand
leg: thigh, knee, foot
我试图在邻接表或有向图中表示这一点。最好的方法是什么?我不知道最好的数据结构或如何在 C++ 中表示它。
我尝试过使用带有键值的结构(人、头等),它是父索引,它是作为向量的子元素:
struct Node
{
string key;
int parentIndex;
vector<string> children;
};
但这似乎效率不高。有什么想法吗?
也许这样会更好?
struct {
string key;
Node* parent;
vector<Node> children;
};
【问题讨论】:
-
@Christophe 我编辑了这个问题。
-
要读取文件,您应该使用
std::ifstream。对于解析行,不要忘记 C++ 是基于 C 构建的 - 查看 C 的strtok函数。对于存储,请考虑std::map<[key], [container]<[key]>>的一些风格。 -
@Conduit 是说我们应该使用 map
>?为了查询这个结构,我们想使用类似图的算法,如 DFS 等。 -
您的结构实际上是一棵树:每个节点都有一个父节点,并且可能有几个子节点。这是你打算做的吗?另外,我是否理解您的节点本身存储在向量中(当您按索引而不是名称搜索时)?
-
但它仍然是一棵树:您的节点只有一个父节点,并且子节点包含在父节点中。如果您的数据结构确实是一棵树,那么您的编辑就可以了。但是,如果您可以有断开的零件,或者如果一个零件可能是多个零件的“孩子”,那么您可能会遇到问题。
标签: c++ data-structures graph