2010-05-16 2 views
1

Есть ли функция, которая делает то же самое, что и map::lower_bound, за исключением того, что возвращает новую подкарту, а не итератор?map :: lower_bound, который возвращает карту

Редактировать: Функция должна возвращать суб-карту, которая содержит все значения, для которых ключ равен или больше, чем определенное значение (которое дано в качестве входных данных для функции).

+0

Что вы ожидаете от такого подмапа? –

+0

Что касается вашего редактирования: для этого вам не нужна 'upper_bound()'? – sbi

+1

'lower_bound' найдет первый элемент, который не меньше заданного ключа, который, очевидно, будет включать сам ключ. 'upper_bound' исключает ключ. –

ответ

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()); 
} 

Edit: Кажется, что вы на самом деле хотите upper_bound() вместо lower_bound().

+0

@Marcelo: На самом деле, этот «бла» не был случайностью. Мне трудно найти хорошее имя для функции, создающей карту в соответствии с некоторыми особенностями. 'equal_or_greater' звучит как функция компаратора, а не как создающая карту. – sbi

+0

Справедливая точка, sbi. Я лично не против перегружать имена таким образом, поскольку параметры, как правило, устраняют путаницу, и люди очень хорошо справляются с двусмысленностью в любом случае. –

Смежные вопросы