【问题标题】:How do I store this data set in C++ (which containers do I use)?如何在 C++ 中存储这个数据集(我使用哪些容器)?
【发布时间】:2011-06-06 21:18:19
【问题描述】:

我的数据表示如下。

A-> B,C,D,E,F
B-> C,(D,E),F
D-> (E,F)
E-> (F,G)
F-> (G)
G-> NULL

每个字母代表一个字符串。所有字母/字符串均按字母顺序排列。 B-> 意味着 B 是它后面的每个元素的成员。所以对于这个例子,B行由集合(B,C),(B,D,E)和(B,F)组成。每行只能包含比行字符串更高的字符串。我必须这样排列数据。

我应该使用像向量这样的序列容器还是像集合这样的关联容器?

我正在构建小集群来构建大集群,所以我将从下往上遍历所有数据。

我的猜测是一组集合?

【问题讨论】:

  • 如果您计划以可预测的方式从一端迭代数据并希望存储锯齿状数组,则列表列表听起来是个好主意。唯一的问题是排序...
  • 字母是代表实际的字符串,比如多字符串,还是只是指向字符的指针,比如const char *?
  • 它们代表实际的字符串

标签: c++ vector set containers


【解决方案1】:

您正在寻找的似乎是图表,但标准 C++ 库 (STL) 没有这样的数据结构。下一个最佳选择是 multimap:map 是 1:1 关联数组,而 multimap 是 1:many 关联数组。

【讨论】:

  • 不,您可以使用 find() 方法查找 1 部分(也称为键),但不能查找多部分(也称为值)。
  • 最终得到了一组地图
【解决方案2】:

我会说使用哈希表,其中每个字符串映射到一个向量,然后每个向量元素指向另一个向量。

所以是这样的:

"b" -> {{"a", "b"},{"d"},{"e"}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多