Item1 (map::find で検出) が Item2 からどれだけ離れているかについての質問は完全ではありません。場合によっては、 new を作成する方が効率的map::find
です。場合によっては、イテレータを繰り返し処理して、2 番目の項目がどこにあるかを見つけることができます。検索だけを使用map::find
すると、O(log n)の複雑さになり、約10〜20ステップになる可能性があります。
したがって、 Item2 がそれほど遠くないことがわかっている場合は、it
iterator を反復して見つけることができます。ここで最も重要なことは、検索を停止する必要があることを確認する方法です。std::map
はstd::less<T>
デフォルトでアイテムを配置するために使用されるため、コンテナに Item2 がまったく含まれていないことを確認するために使用できます。このようなもの(テストされていません):
std::map<key, value> map_elements;
std::map<key, value>::iterator it, it2;
it2 = it = map_elements.find(some_key);
bool found=false;
while( it2!=map_elements.end() && !(a_close_key < it2->first) ) {
if( !(a_close_key < it2->first) && !(it2->first < a_close_key) ) {
//Equivalency is not ==, but its what used in std::map
found=true;
break;
}
it2++;
}
if( found ) {
//.... use it2
}
ブロック内if( found )
のイテレータit2
値は、呼び出した場合と同じでなければなりませんmap_elements.lower_bound(a_close_key)