LINUX.ORG.RU

Итерация по unordered_set быстрее чем по vector?

 ,


0

4

Ковыряю алгоритмы на Leetcode. Преобразую vector в unordered_set для кеширования и поиска элементов, ничего сложного. Далее собственно итератор по vector, и проверка есть ли каждый элемент в unordered_set и далее логика если есть.

Запуск кода вываливается на платформе с ошибкой мол алгоритм отработал слишком медленно.

Барабанная дробь - меняем итерацию по массиву на итерацию по unordered_set - алгоритм укладывается во временные рамки. Что за? Есть разумное объяснение? А то все говорят что итерации по массиву быстрее быть не может за счёт кеширования в CPU и предвыборки элементов массива загодя в кеш. Оказывается может.

int func(vector<int>& nums) {
    unordered_set<int> set;

    for (auto n : nums) {
        set.insert(n);
    }

    // Итерация по nums медленнее чем по 'set' !!!
    for (auto n : nums) {
    ...
Ответ на: комментарий от bugfixer

дык оригинальный тест ваще к задаче с псевдоалгокачки чисто понимание ТС чё

в самой задачке(как оказалось с фигой в кармане) тесты более чтоли равновероятные

qulinxao3 ★☆
()
Ответ на: комментарий от anonymous

И у меня свой интерес и своя практика

Дык, а толку то гонять на входе без дупликатов? Когда вы в миллиарды уходите дырок в вас практически не остаётся. Это очень и очень вырожденный случай. Я даже не до конца понимаю какую практическую пользу из этого извлечь можно.

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

Я даже не до конца понимаю какую практическую пользу из этого извлечь можно.

Практическое значение «идеального» хеша. Превращение О(1) в O(logn), там где не ждали.

anonymous
()