multimap upper_bound返回混淆

时间:2012-03-22 23:26:39

标签: c++ stl multimap

我有一个填充配对的多图。我想迭代一个范围。 upper_bound不返回指向元素的迭代器,除非它找到第一个元素,其键大于传递给upper_bound的值。

如何判断upper_bound是否没有返回值,因为没有任何值超过传递的值?

谢谢!

3 个答案:

答案 0 :(得分:1)

请参阅referencemsdn

upper_bound返回大于键值的第一个元素,如果没有元素,则返回与end()相同的

因此,您可以将其与多图的结尾进行比较

auto it = my_multi_map.upper_bound(some_val);
if (it == my_multi_map.end())
{
  // iterator is pointing past end so no value found
}

答案 1 :(得分:1)

至少如果内存服务,如果upper_bound没有找到键大于你传递的键的元素,它将返回container.end()。这对于迭代是很好的,因为一对迭代器的范数是范围的开始和一个结束,因此您可以使用container.end()作为范围的结尾而没有任何问题。

答案 2 :(得分:1)

upper_bound实际上非常适合迭代,因为它指向范围结束后的元素 - 就像end一样。所以你要形成类似的循环。

for (auto it = mymap.lower_bound(start_key), end = mymap.upper_bound(end_key); it != end; ++it)

如果您只想要一个密钥,请将相同的值传递给lower_boundupper_bound,或使用equal_range同时获取两个密钥。如果地图中根本不存在该值,则lower_boundupper_bound将相等,并且循环将不会执行。