存储文件中的键值数据

时间:2013-07-06 22:43:55

标签: c++ parsing tree key-value

好吧,所以我已经解决了一个问题,即我有限的编程技巧根本无法解决,至少是以优雅的方式。我想存储来自Valve KeyValues files的数据,但我想不出一个好的方法来实现它。我将在这段代码中说明文件格式的基本结构。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

  

“键”

     

{

     

...

     

}

     

“键”

     

{

     

...

     

}

现在,构建一个森林,其树木以块的初始“Key”为根。密钥的子项将是子块中的密钥等等。叶子将包含“值”。

树将是n-ary,而不是二进制。级别中的“键”可以按从左到右的排序顺序存储,这将增强与查询的键对应的值的检索时间。

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