![]() |
Сортировка в векторе с элементами null
Обнаружил достаточно забавный факт.
Есть, например, вот такой код: Код AS3:
При всех null - 800 мс против 2 мс при полном отсутствии null в векторе. P.S.: Ещё, раз уж зайдёт речь про вектора, задам несколько глупых вопросов. 1. Какая польза от использования свойства fixed = true? Понимаю, по ходу прирост скорости, но за счёт чего, что при этом происходит в самом векторе? 2. Можно ли реализовать вообще фиксированный вектор, чтобы обращение по индексу к элементам шло не итератором или ещё чёртичем для списка, а по смещению? |
Тормоза кода связаны с тем, что ваш компаратор генерирует полную фигню на выходе. От него вообще-то ожидается, что если a < b, то b > a. А у вас если a == null и b == null указанное не выполняется. Поэтому можно даже и корректности сортировки не получить.
1. В первую очередь из-за того, что его размер не меняется, экономятся перераспределения памяти. Вполне может быть, что просто отсутствие изменения размера массива (с fixed == false) по быстродействию окажется таким же, что и при fixed == true. 2. А почему вы решили, что обращение идет итератором или по списку? Вектор то (в отличие от массива) плотная (dense) структура, на ней эффективно реализуется индексный доступ. В том числе и для resizeable vector, с амортизированной сложностью добавления и удаления в конец списка O(1). |
Ничего подобного. Компаратор правильно написан. Я проверил.
Единственное - он сортирует null-элементы в начало вектора, но это не влияет на время выполнения (это я тоже проверил). Добавлено через 3 минуты За ответы на вопросы спасибо. |
Как же правильно то? Он почему-то считает, что null < null вместо того, что null == null. Компаратор не сортирует. Он сравнивает. И компаратор, игнорирующий при одном из сценариев выполнения второе значение правильным быть не может.
|
Код AS3:
Код AS3:
И это в дебаг версии. |
Аааа!.. Да, всё! Понял!
Был не прав. Тему можно закрывать. P.S.: Цитата:
|
а если функцию сделать не анонимной, да еще и тип ей задать, то еще быстрее станет)
|
Цитата:
|
| Часовой пояс GMT +4, время: 00:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.