18#include "common/lang/iterator.h"
31template <
typename ForwardIterator,
typename T,
typename Compare>
32ForwardIterator lower_bound(
33 ForwardIterator first, ForwardIterator last,
const T &val, Compare comp,
bool *_found =
nullptr)
37 const auto count = distance(first, last);
38 auto last_count = count;
39 while (last_count > 0) {
41 auto step = last_count / 2;
43 int result = comp(*iter, val);
51 last_count -= step + 1;
67 int operator()(
const T &v1,
const T &v2)
const
79template <
typename ForwardIterator,
typename T>
80ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
const T &val,
bool *_found =
nullptr)
82 return lower_bound<ForwardIterator, T, Comparator<T>>(first, last, val,
Comparator<T>(), _found);
90template <
typename T,
typename Distance = ptrdiff_t>
94 using iterator_category = random_access_iterator_tag;
96 using difference_type = Distance;
97 using pointer = value_type *;
98 using reference = value_type &;
102 BinaryIterator(
size_t item_num, T *data) : item_num_(item_num), data_(data) {}
106 data_ += (item_num_ * n);
125 bool operator==(
const BinaryIterator &other)
const {
return data_ == other.data_; }
126 bool operator!=(
const BinaryIterator &other)
const {
return !(this->operator==(other)); }
128 T *operator*() {
return data_; }
129 T *operator->() {
return data_; }
133 return (left.data_ - right.data_) / left.item_num_;
137 size_t item_num_ = 0;
Definition: lower_bound.h:92
Definition: lower_bound.h:65