std::map<tuple<...>>
ルックアップデータ構造としてを使用するクラスを構築しています。マップ上でプレフィックス検索を実行して、タプル内で特定のプレフィックスを共有するすべての要素を見つけられるようにしたいと思います。例えば:
using namespace std;
map<tuple<int,int,int,string>,Value> index;
index.insert(make_tuple(1,1,1,"a"),Value());
index.insert(make_tuple(1,1,2,"b"),Value());
index.lower_bound(make_tuple(1,1,std::numeric_limits<int>::min(),""));
これは私が必要としていることを正確に実行しますが、手動で(非PODタイプの場合)最小値を計算する必要があります。さらに悪いことに、特定のプレフィックスを持つ最高の要素を見つけたい場合(私はそうします)、特定のタイプの最大要素値を見つける必要がありますが、これstring
はかなり問題があります。
理想的にはmap.find/lower_bound/upper_bound
、接尾辞を考慮しない別の比較を(マップ上の線形の複雑さであるstd :: findではなく)提供できますが、残念ながらこれは不可能です。おそらく、プレフィックス検索が多かれ少なかれ賢明なアプリケーションのみ。
オプションは、実行時にマップで使用される比較を変更するか(これは非常に悪いスタイルだと思います)、タプル内にあるすべてのタイプに相当するnumeric_limitsを実装することになると思います。
マップ/セットでプレフィックス検索を実行するためのより良いオプションはありますか?