Нахождение реализации алгоритма дерева интервала C++ [дубликат]

Прежде всего: вы можете указать базу только для int() при преобразовании строк в числа. Допустим, у вас есть строка с шестнадцатеричным числом , поэтому база 16:

>>> int('2a', 16)
42

Этот результат значительно отличается от той же строки, интерпретируемой как другая база:

>>> int('2a', 11)
32
>>> int('2a', 29)
68

[ 1112] Вам когда-либо понадобится база целого числа, только когда представляет значение визуально или при разборе целочисленного значения из строкового представления. Вы можете отображать целочисленное значение многими различными способами, но объект int является значением, а не визуальным представлением, и не имеет базы, и вы не можете изменить эту базу.

Логическое расширение, когда уже поддерживается шестнадцатеричное обозначение (цифры 0-9 и буквы AF), также поддерживается с использованием букв GZ, а 10 цифр и 26 букв позволяют использовать основание 36:

>>> int('zz', 36)
1295

[ 1114] Дальнейшие базы должны будут использовать не алфавитно-цифровые символы, для которых нет четкого предварительно установленного порядка.

Вы не можете иметь базу ниже 2; Вы не можете сосчитать только одной цифрой, значение 0 не изменится.

8
задан Jonathan Leffler 3 May 2015 в 02:42
поделиться

1 ответ

Библиотека стандарта C++ предлагает красные/черные деревья std::map, std::multimap, std::set и std::multiset.

Действительно, я не могу думать ни о каком способе обработать это более эффективно, чем сохранить a std::map из пар итератора, и передающий тех пар итератора upper_bound() и lower_bound(). Вы хотели бы, чтобы пары итератора были сохранены в карте сами так, чтобы Вы могли легко обнулить в, на котором пары, вероятно, будут в интервале (если начинающийся итератор в "интервале кандидата" прибудет после конца данного интервала, Вы смотрите на, затем можно пропустить проверку что - и все позже - пары итератора).

3
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: