我需要一个数据结构来读取以下示例数据:
[TAG1]
PROPERTYA=TRUE
PROPERTYB=TRUE
PROPERTYC=TRUE
[TAG2]
PROPERTYA=TRUE
PROPERTYB=FALSE
PROPERTYC=FALSE
etc...
有任何想法吗?
一种解决方案是拥有一个包含所有属性的数组和另一个具有相同大小的值的数组。但是我怎么知道哪个属性在哪个标签下?
一个怎么样
std::map<string, std::map<string, bool> >
每次点击 [TAG] 行时构造一个新的 string:bool 值映射,并存储所有这些由 TAG 键入的映射
除了使用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;
由于您使用的是Qt,我实际上会详细说明jrs的答案:
默认选择:
#include <QMap>
#include <QString>
QMap< QString, QMap<QString, bool> > data;
如果性能至关重要并且您可以按名称失去访问权限:
#include <QVector>
QVector< QVector<bool> > data;
创建一个 Tag 类,该类将具有一个 bool 数组和表示标签名称的字符串。但是,这取决于您将如何使用之后的信息以及标签数量的上限将决定您应该在哪种数据结构中存储标签对象。(列表、哈希表、数组)