2010-05-16 78 views
1

是否有一个函数与map::lower_bound做同样的事情,除了它返回一个新的子映射而不是一个迭代器?map :: lower_bound返回一个映射

编辑:该函数应返回的子图,其包含的量,关键是等于或大于一定值(其给定为输入函数)更大的所有值。

+0

你期望这样一个子图包含什么? – 2010-05-16 13:37:58

+0

关于你的编辑:你不需要'upper_bound()'吗? – sbi 2010-05-16 13:46:22

+1

'lower_bound'将找到不小于给定键的第一个元素,这明显包含键本身。 'upper_bound'将不包含密钥。 – 2010-05-16 14:04:22

回答

6

这样的事情?

// Beware, brain-compiled code ahead! 
template< typename K, typename V > 
std::map<K,V> equal_or_greater(const std::map<K,V>& original, const K& k) 
{ 
    return std::map<K,V>(original.lower_bound(k), original.end()); 
} 

编辑:看来你真的想upper_bound()而不是lower_bound()

+0

@Marcelo:实际上,那个'blah'不是偶然的。根据某些具体情况,我很难为创建地图的函数想出一个好名字。 'equal_or_greater'听起来像是比较函数,不像创建地图的函数。 – sbi 2010-05-16 13:48:24

+0

公平点,sbi。我个人不介意以这种方式重载名称,因为参数往往可以解决混淆问题,而人类无论如何都很善于处理歧义。 – 2010-05-16 14:02:36