如果我有一个使用比较函数(仿函数)插入键的地图/多图,是否可以将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 *可能吗?
答案 0 :(得分:1)
有一个很好的理由说明你不能将map::equal_range()
与自定义比较器一起使用:它会破坏容器的同生性。它可以完成,但算法将是O(n)而不是O(log(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);
}
答案 1 :(得分:0)
equal_range
功能不提供此功能,但您可以调用lower_bound
传递getVal == 110
的值,upper_bound
传递getVal == 120
的值。这对迭代器应该表示半开范围内的所有值[110,120]。