3つの文字列をキーとして使用するマップを使用しているとしましょう。構造体の簡単な例を次に示します。
struct ExampleMapKey
{
std::string key0;
std::string key1;
std::string key2;
bool operator<(const ExampleMapKey& other) const
{
if (key0 < other.key0) return true;
else if (key0 > other.key0) return false;
if (key1 < other.key1) return true;
else if (key1 > other.key1) return false;
return key2 < other.key2;
}
}
さて、これは私が使いたいと決めるまではうまくいきlower_bound
ますupper_bound
。key0、 "ab"で始まるkey1、および "cd"で始まるkey2によって形成される値の範囲を見つけたい場合は、これら2つの関数をそれぞれとで使用するとExampleMapKey("", "ab", "cd")
、ExampleMapKey("", "ac", "ce")
自分の要件。それとも、そうするキーを見逃しますか?いずれにせよ、それは間違っています。
私が必要としているのは、各キーによって明示的にインデックスを付け、潜在的に複雑な反復を実行できるようにするデータ構造であるように思われlower_bound
ますupper_bound
。そんなことありますか?私は必ずしも文字列を使用しているわけではなく、3つのキーのみに制限されているわけでもないため、STLスタイルまたは同様の汎用である必要があります。