заключаться в более быстром нахождении по индексу у вектора, но более быстром поиске у мапа? Таким образом, вектор пар нужно брать когда часто проходим по нему итерацией, а мапу, когда ищем, вставляем и удаляем?
у мапы нет доступа по индексу у вектора есть поиск если только он отсортирован
имел ввиду не доступ по индексу, а итерацию по мапе
Итерация одинакова
Почти наверное нет
для поиска берут хэшмапы, обычная - для сортировки и поиска equal_range
Вроде нет
Мне всегда казалось, что для поиска по числовым ключам берут хэшмапы, для строковых и составных ключей лучше подходят именно мапы. Это верно?
Это эмпирические соображения, пруфов не будет Если не лень, можно сравить итерацию по мапе и вектору примерно в любом сценарии, вектор, скорее всего, будет сильно быстрее Смысл - в мапе куча индирекций, а вектор все время в кеше
Обычная для отсутствия инвалидации итераторов ещё
более того, хеш-мапа как раз для составных будет давать ещё больший профит, т.к. хеш считается один раз и потом O(1) штук сравнений, а обычная мапа даст O(log(N)) сравнений, что в случае длинных строк может быть долго
Вектор дружелюбен к кешу процессора, мапа нет
А как же время для расчета хэша? В случае тех же больших строк разве не будет хуже?
что быстрее - один подсчёт длинного хэша и O(1) длинных сравнений или O(log(N)) длинных сравнений?
Убедили. На сеты то же самое распространяется?
в итоге получается, что для контейнера с двумя значениями неотсортированный вектор может быть лучше только в ситуации переобра-итерации, а для всего остального берем хэшмапы и обычные?
Обсуждают сегодня