Когда происходит перефразирование неупорядоченных ассоциативных контейнеров?

Я нашел это в стандарте как пост-условие для функции rehash в неупорядоченных ассоциативных контейнерах:

Сообщение: a.bucket_count() > a.size() / a.max_load_factor() и a.bucket_count() >= n. (n — количество ведер в контейнере)

Могу ли я считать вышесказанное означающим, что автоматическое перефразирование запускается, когда любое из вышеуказанных условий выполняется для всех реализаций? Или реализации свободны решать, когда перефразировать, а вышесказанное относится только к функции rehash?


person Jesse Good    schedule 26.03.2012    source источник


Ответы (1)


Реализация должна сохранить load_factor() <= max_load_factor() и load_factor() == size() / bucket_count(). Таким образом, во время insert может происходить автоматическое перефразирование, чтобы коэффициент загрузки оставался неизменным.

Хотя load_factor() не может превышать max_load_factor(), я не думаю, что есть гарантия, что во время вставки не будет выполнено перефразирование, даже если вы сможете доказать, что этот инвариант не будет нарушен.

Определение для max_load_factor:

Возвращает положительное число, при котором контейнер пытается поддерживать коэффициент загрузки меньше или равным. Контейнер автоматически увеличивает количество ковшей по мере необходимости, чтобы коэффициент загрузки не превышал этого значения.

person Howard Hinnant    schedule 26.03.2012