Что вас больше всего удивляет, так это утверждение в ссылке, на которую вы ссылались:
Я создал карту ха sh
Однако это это неверно. std::map
- это древовидная карта, которая обычно реализуется с помощью красно-черного дерева.
Теперь ваш вопрос в основном обращается к проблеме со структурой данных.
Красно-черное дерево - это разновидность бинарного поиска. дерево, каждый узел которого имеет следующие свойства:
- левый сын узла меньше текущего узла
- правый сын узла больше текущего узла
Обратите внимание, что я использовал "меньше" или "больше" только для того, чтобы вы поняли. Более ценно, учитывая двоичный предикат p
, используемый для организации дерева, которое удовлетворяет требованиям строгого слабого упорядочения, мы предполагаем, что текущий узел равен N, тогда:
p(N, N->left)
- это истина p(N, N->right)
ложно
Итак, теперь вы находитесь на вершине дерева, чтобы найти правильный узел, вам нужно продолжать сравнивать имеющееся у вас значение с текущим узлом и принять решение в каком направлении вам следует go.
И вы можете спросить, почему ==
не требуется, потому что когда предикат p удовлетворяет требованию строгого слабого упорядочения, следующие два выражения эквивалентны (не точно, но при аренде интересующая нас часть эквивалентна):
A. !(p(A, B) || p(B, A))
B. A == B
Вы можете спросить себя, когда A не меньше B, а B не меньше A, какова связь между A и B?