Re[3]: QSet, скорость перебора контейнера
От: watchmaker  
Дата: 16.08.18 22:09
Оценка: +1
Здравствуйте, vopl, Вы писали:


V>Сугубо не согласен. В текущем аспекте — и генераторы и визитор и итераторы — все они эквивалентны по стоимости, если их рассматривать как абстракции архитектурного подхода. На с++ можно все эти три абстракции реализовать с нулевой одинаковой стоимостью для себжевого случая — перебора элементов хэш-таблицы.


Ну не совсем так.
Когда в стандарт C++ добавляли хеш-таблицы (которые стали std::unordered_map и std::unordered_set), то даже в самом proposal было замечено, что классические итераторы C++ — плохие, и эффективно проитерироваться по хеш-таблице ими не получается: мешает их устаревший интерфейс. Под "эффективно" тут подразумевается по сравнению с другими способами итерирования по содержимому (один из которых — это метод for_each у контейнера).
Смотри, например, раздел "Bucket Interface" предложения по хеш-таблицам.
А о том, как можно исправить итераторы C++ (несовместимым образом, конечно же) можно прочитать в другом предложении: Segmented Iterators and Hierarchical Algorithms (лучше даже с него начать).

То есть классические итераторы в этом плане ущербны и действительно проигрывают по скорости другим альтернативам.
И хотя в bucket interface тоже есть нечто с названием local_iterator, но это совсем другой итератор. И обход хеш-таблицы через него записывается чуть хитрее чем просто for (auto it = indices.begin(); it != indices.end(); ++it).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.