Когда происходит перефразировка для неупорядоченных ассоциативных контейнеров? - PullRequest
5 голосов
/ 27 марта 2012

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

Post: a.bucket_count ()> a.size () / a.max_load_factor () и a.bucket_count ()> = n.(n - количество сегментов в контейнере)

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

1 Ответ

8 голосов
/ 27 марта 2012

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

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

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

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

...