寻找工作的最佳数据结构

时间:2013-06-22 00:11:40

标签: c++ qt

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

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

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

etc...

有什么想法吗?

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

4 个答案:

答案 0 :(得分:4)

怎么样?
std::map<string, std::map<string, bool> >

每次点击[TAG]行时构造一个新的字符串地图:bool值,并存储由TAG键入的所有这些地图

答案 1 :(得分:1)

您可以使用某种“向量矢量”结构来存储您的数据,而不是使用jrs建议的std::map<string, std::map<string, bool> >,如果性能受到关注,这种结构更可取。

我将举两个例子,说明这两个中的一个会受到青睐。

你什么时候想要一张地图?

  • 如果您想按标签名称或属性名称查找元素,您应该选择地图。

你什么时候喜欢矢量?

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

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

每个属性都是一对字符串名称boolean。

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

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

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

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

std::vector<tag> tags;

答案 2 :(得分:0)

创建一个Tag类,该类具有bool数组和表示标记名称的字符串。但是,根据您将如何使用之后的信息,标签数量的上限将决定您应该在哪个数据结构中存储Tag对象。 (list,hashtable,array)

答案 3 :(得分:0)

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

默认选择:

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

如果性能至关重要,您可以通过名称失去访问权限:

#include <QVector>
QVector< QVector<bool> > data;