2015-06-15 2 views
-4

В чем разница между unordered_map и картой C++ STL. Пожалуйста, объясните с точки зрения сложности и использования.differentiate unordered_map vs map

Я заменяю карту неупорядоченным_мапом, и я получил, когда раньше я получал предел времени Превышен.

И где мы должны использовать карту и где неупорядоченный карта

+2

вы можете сделать perhap, чтобы приложить усилия по поиску терминов и прочитать себя. – Christophe

ответ

0

std::map гарантировало O (журнал N) сложность для поиска, вставки и удаления. Он использует оператор сравнения, и итерация происходит в порядке, определенном этим оператором сравнения.

std::unordered_map гарантирует только O (N) сложность для поиска, вставки и удаления, но вы обычно ожидаете, что это будет O (M), где M (более или менее) размер индивидуального ключа. Предполагая, что ключи малы относительно количества элементов, это в основном O (1).

+0

Если вы рассматриваете размер ключа в std :: unordered_map, вы также должны сделать это на std :: map. Сложность - O (logN * M), где M (более или менее) сложна для каждого сравнения. –

+0

@icando: да и нет - по крайней мере, в типичном случае с картой вы можете остановить сравнение при первом несоответствии между двумя ключами, тогда как с неупорядоченной картой ваш хэш должен учитывать весь ключ каждый время. С точки зрения пуристов, они оба O (M), но, более практично, разница может быть весьма существенной. –