我需要一个数据结构来读取以下示例数据:
[TAG1]
PROPERTYA=TRUE
PROPERTYB=TRUE
PROPERTYC=TRUE
[TAG2]
PROPERTYA=TRUE
PROPERTYB=FALSE
PROPERTYC=FALSE
etc...
有什么想法吗?
一种解决方案是使用所有属性的数组和具有值的相同大小的另一个数组。但我怎么知道哪个属性在哪个标签下?
答案 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;