0

さて、私の限られたプログラミング スキルでは、少なくともエレガントな方法では解決できない問題に遭遇しました。Valve KeyValues ファイルのデータを保存したいのですが、良い方法が思いつきません。このコード ブロックで、ファイル形式の基本構造を説明します。

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

各値は、いくつかのタイプのいずれかになります。各キーには、特定のタイプが割り当てられた値が必要です。タイプを変更してキー自体が配置されている場所はどこでもかまいませんが、これには疑問があります。実際には、キー、値、およびブラケットによってファイルを既にトークン化できるため、必要でない限り、それについての助けは必要ありません。私は、迅速で汚いものではなく、大量の反復コードに依存するシステムを作成したいと考えています。ご不明な点がございましたら、お気軽にお問い合わせください。

4

2 に答える 2

0

std::map<std::string, boost::any>簡単な解決策は、コンテナーを使用することです。これにはboost::anyを使用する必要があります。もう 1 つの解決策は、キーと値のペアを an の意味で単純な文字列として格納し、boost::lexical_caststd::map<std::string, std::string>を使用して変換することです。

于 2013-07-06T23:01:52.007 に答える
0

この問題に適用できると思われる解決策を次に示します。

私はあなたがこのような多くのブロックを与えられるかもしれないと仮定しています-

"鍵"

{

...

}

"鍵"

{

...

}

ここで、ブロックの最初の「キー」を根とする木で森を構築します。キーの子は、サブブロックなどにあるキーになります。葉には「値」が含まれます。

ツリーはバイナリではなく n-ary になります。レベル内の「キー」は、左から右にソートされた順序で格納できます。これにより、クエリされたキーに対応する値の取得時間が短縮されます。

このようなストレージは、私が考えることができる最もエレガントな方法の 1 つです。さらなる考えや提案をいただければ幸いです。

于 2013-07-07T14:43:58.963 に答える