-3

我需要一个数据结构来读取以下示例数据:

[TAG1]
PROPERTYA=TRUE
PROPERTYB=TRUE
PROPERTYC=TRUE

[TAG2]
PROPERTYA=TRUE
PROPERTYB=FALSE
PROPERTYC=FALSE

etc...

有任何想法吗?

一种解决方案是拥有一个包含所有属性的数组和另一个具有相同大小的值的数组。但是我怎么知道哪个属性在哪个标签下?

4

4 回答 4

4

一个怎么样

std::map<string, std::map<string, bool> >

每次点击 [TAG] 行时构造一个新的 string:bool 值映射,并存储所有这些由 TAG 键入的映射

于 2013-06-22T00:16:22.770 回答
1

除了使用std::map<string, std::map<string, bool> >jrs 的建议,您还可以使用某种“向量的向量”结构来存储您的数据,如果性能是一个问题,这是更可取的。

我将给出两个场景示例,其中一个将受到青睐。

你什么时候喜欢地图?

  • 如果您想通过标签名称或属性名称查找元素,您可能应该使用地图。

你什么时候更喜欢矢量?

  • 如果您关心插入和元素访问的性能。在向量中插入元素会更快,并且元素访问是基于索引的,因此在时间上是恒定的。(不查找仅发生单个指针/迭代器算术运算。)
  • 如果您将面临所有元素的(许多)迭代,因为连续存储将导致更好地使用缓存。

您将如何将其存储在向量中?

每个属性都是一对字符串名称布尔值。

struct props
{
  std::string name;
  bool value;
};

每个标签在向量中都有一个名称和任意数量的属性。

struct tag
{
  std::string name;
  std::vector<props> properties;
};

数据将具有任意数量的标签。

std::vector<tag> tags;
于 2013-06-22T00:50:28.630 回答
0

由于您使用的是Qt,我实际上会详细说明jrs的答案:

默认选择:

#include <QMap>
#include <QString>
QMap< QString, QMap<QString, bool> > data;

如果性能至关重要并且您可以按名称失去访问权限:

#include <QVector>
QVector< QVector<bool> > data;
于 2013-06-22T07:59:01.550 回答
0

创建一个 Tag 类,该类将具有一个 bool 数组和表示标签名称的字符串。但是,这取决于您将如何使用之后的信息以及标签数量的上限将决定您应该在哪种数据结构中存储标签对象。(列表、哈希表、数组)

于 2013-06-22T00:21:57.707 回答