Попробуй std::equal_range. Он возвращает пару итераторов. Если они равны, значит объект не найден, если не равны, значит найден, и первый итератор указывает на объект.
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Здравствуйте, valker, Вы писали:
V>Попробуй std::equal_range. Он возвращает пару итераторов. Если они равны, значит объект не найден, если не равны, значит найден, и первый итератор указывает на объект.
Это лишняя работа.
В C++09 будет функция вроде
template <class ForwardIterator, class X>
ForwardIterator no_name_yet(ForwardIterator first, ForwardIterator last, X const& x)
{
ForwardIterator const lb = (lower_bound)(first, last, x);
return x < *lb ? last : lb;
}
которая будет возвращать итератор, если объект найден, или PTE, если не найден.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, valker, Вы писали:
V>>Попробуй std::equal_range. Он возвращает пару итераторов. Если они равны, значит объект не найден, если не равны, значит найден, и первый итератор указывает на объект.
RO>Это лишняя работа.
RO>В C++09 будет функция вроде
RO>RO>template <class ForwardIterator, class X>
RO>ForwardIterator no_name_yet(ForwardIterator first, ForwardIterator last, X const& x)
RO>{
RO> ForwardIterator const lb = (lower_bound)(first, last, x);
RO> return x < *lb ? last : lb;
RO>}
RO>
RO>которая будет возвращать итератор, если объект найден, или PTE, если не найден.
давно пора, а то через lower_bound не красиво
... << RSDN@Home 1.2.0 alpha 4 rev. 1091>>
RO>Это лишняя работа.
RO>В C++09 будет функция вроде
RO>RO>template <class ForwardIterator, class X>
RO>ForwardIterator no_name_yet(ForwardIterator first, ForwardIterator last, X const& x)
RO>{
RO> ForwardIterator const lb = (lower_bound)(first, last, x);
RO> return x < *lb ? last : lb;
RO>}
RO>
RO>которая будет возвращать итератор, если объект найден, или PTE, если не найден.
Спасибо ответившим. Сделал через lower_bound. Только в функции выше недочет; не учитывается что lower_bound может вернуть last.