0

好的,所以我遇到了一个我有限的编程技能根本无法解决的问题,至少以一种优雅的方式。我想存储Valve KeyValues 文件中的数据,但我想不出一个好的方法。我将在这段代码中说明文件格式的基本结构。

"Key"
{
    "Key"
    {
        "Key" "Value"
        "Key" "Value"
    }
    "Key"
    {
        "Key" "Value"
        "Key" "Value"
    }
    "Key" "Value"
    "Key" "Value"
}

每个值都可以是几种类型之一。每个键都必须具有分配给它的特定类型的值。通过更改类型来定位密钥本身的位置,但我对此表示怀疑。实际上,我已经可以通过键、值和括号对文件进行标记,因此除非有必要,否则我不需要任何帮助。我想创建一个不快速和肮脏并且依赖大量重复代码的系统。如果你们有任何问题,请随时提问。

4

2 回答 2

0

这是我认为可以应用于此问题的解决方案:

我假设你可能会得到很多这样的块 -

“钥匙”

{

...

}

“钥匙”

{

...

}

现在,构建一个森林,其树根植于块的初始“键”。键的孩子将是子块等中的键。叶子将包含“值”。

这些树将是 n 元的,而不是二元的。关卡中的“Keys”可以按照从左到右的排序顺序存储,这样可以增加查询到的key对应的值的检索时间。

这样的存储将是我能想到的最优雅的方式之一。进一步的想法和建议表示赞赏。

于 2013-07-07T14:43:58.963 回答
0

一个简单的解决方案是使用std::map<std::string, boost::any>容器。您需要为此使用boost::any。另一种解决方案是将键值对存储为一个意义上的简单字符串,std::map<std::string, std::string>然后使用boost::lexical_cast进行转换。

于 2013-07-06T23:01:52.007 回答