2

比較関数(ファンクター)を使用してキーが挿入されたマップ/マルチマップがある場合、比較関数でmap :: equal_rangeを使用することもできますか?たとえば、std :: map mとkeysがある場合:

sometype a.getVal == 101
sometype b.getVal == 112 <-first pair (using equal_range)
sometype c.getVal == 113
sometype d.getVal == 121 <-second pair (using equal_range)

そして私はキーの範囲/セットを取得したかった11*それは可能ですか?

4

2 に答える 2

1

カスタム比較ツールで使用できないのには十分な理由がありmap::equal_range()ます。それは、コンテナーの結合性を無効にするからです。それは可能ですが、アルゴリズムはO(log(n))ではなくO(n)になります。これmapは、位置に関係なくすべての要素を比較する必要があるためです。

あなたの問題に対する最善の解決策は 、間隔の制限を使用map::lower_bound()して見つけるカスタム関数だと思います。map::upper_bound()何かのようなもの:

typedef std::map<int>::iterator Iter;
std::pair<Iter, Iter> CustomEqualRange (const std::map<int>& theMap, int lowerBound, int range)
{
  Iter lower = theMap.lower_bound(lowerBound);
  Iter upper = theMap.upper_bound(lowerBound + range);
  return std::make_pair(lower, upper);
}
于 2012-10-01T15:12:07.587 に答える
0

この関数はそれを提供しませんが、値を。で渡し、値を。で渡すequal_rangeことを呼び出すことができます。そのイテレータのペアは、ハーフオープン範囲[110、120)のすべての値を表す必要があります。lower_boundgetVal == 110upper_boundgetVal == 120

于 2012-10-01T15:11:47.287 に答える