0

私は多くのオブジェクトを持っています。各オブジェクトには、いくつかのキーと値のペアが関連付けられています。キーは任意の文字列です (キーはオブジェクトごとに異なる場合があり、可能なキーの完全なリストはありません)、値は数値、文字列、日時などにすることができます。

複雑な検索クエリを使用して、このコレクションを検索する必要があります。最も単純な実装では、ユーザーは興味深いキーのリストと各キーの値に対する条件を指定できなければなりません。

key1: not present
key2: present
key3: == "value3"
key4: < 42
key5: contains "value5"

エンジンは、すべての条件を満たすすべてのオブジェクトを検索する必要があります (つまり、条件は AND で結合されます)。完全な実装では、ユーザーはクエリ言語を使用して条件を指定できます。

key1 = "value1" AND (key2 < 3 OR key3 < 3)

Windows 上の Qt で C++ を使用しています (Linux のサポートは必要ありませんが、有効です)。インストールが必要なデータベース (特に管理者権限が必要) は使用したくありません。ソリューションを移植可能にしたいのです。

これを最初から実装するか、私のニーズを満たすライブラリまたはデータベースを使用する良い方法を提案してください。

Upd:問題は、大量のデータをディスクに保存し、高速に検索することです。おそらく、検索クエリの解析と処理に関するものでもあります。メモリ内のデータを表すために使用する必要があるデータ構造についてではありません。とても簡単です。

4

2 に答える 2

1

キーが一意である場合は、std::mapor (C++11)を使用しstd::unordered_mapます。

キーが一意でない場合は、std::multimapor (C++11)を使用しstd::unordered_multimapます。

後者には O(1) の検索と挿入がありますが、高品質のハッシュ アルゴリズム (作成するのは簡単ではありません) を提供する必要があり、マップが拡大および縮小するときにマップを再ハッシュする可能性があります。

検索はコンテナによって提供されます。

シリアル化は、読者の練習問題として残されています。

于 2013-06-07T11:24:31.777 に答える
0
use Nested Maps like std::map<key1,std::map<key2,value>>....
于 2013-06-07T11:25:44.057 に答える