Блог пользователя dmkz

Автор dmkz, история, 22 месяца назад, По-русски

Всем привет!

Я взял всем известный ordered_set в C++ (а точнее __gnu_pbds::tree<...> из GNU C++ Standard Template Library с реализованными Policy-Based Data Structures), унаследовался от него и добавил новые методы к наследнику:

  1. lower_bound_with_order -> возвращает итератор на минимальный >= элемент + его индекс в множестве (порядок);

  2. upper_bound_with_order -> возвращает итератор на минимальный > элемент + его индекс в множестве (порядок);

  3. count_less -> количество элементов, меньших заданного;

  4. count_less_equal -> количество элементов, меньших либо равных заданному;

  5. count_greater -> количество элементов, больших заданного;

  6. count_equal -> просто количество равных элементов.

Преимущество (1) и (2) в том, что это всё считается за один обход дерева (один логарифм). Если вызывать сначала lower_bound, а затем для него order_of_key, то будет два обхода дерева — два логарифма.

Исходный код
Результат запуска исходного кода

Забирайте себе, если нужно. На очереди допиливание для ordered_multiset. Пробую ordered_set с компаратором std::less_equal вместо std::less...

  • Проголосовать: нравится
  • +84
  • Проголосовать: не нравится

»
22 месяца назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

yuck, i want this inside STL, this is too much work