Сортировка вектора, содержащего указатель на структуру VS Struct - PullRequest
0 голосов
/ 20 марта 2012

Я сортирую большой вектор, содержащий структуры, используя heapsort, и время выполнения моего кода довольно медленное. Вместо сохранения структуры в векторе я хочу сохранить указатель на структуру сейчас.

Мой вопрос заключается в том, что на самом деле происходит, когда я сортирую вещи, и будет ли быстрее, если я сохраню указатель на структуру, а не на саму структуру?

1 Ответ

0 голосов
/ 23 марта 2012

Конечно, да. Хранение объектов в виде значений в контейнерах stl приведет к запуску конструктора копирования хранимого объекта.

В общем, для производительности лучше хранить указатели вместо них. Однако вы должны быть более осторожны с утечками и безопасностью исключений, когда используете вместо них указатели.

В любом случае, самая простая вещь, которая происходит при сортировке, это алгоритм обмена. Что включает в себя создание копии:

void swap(T & a, T & b)
{
    T c = a; // copy constructing
    a = b; // copy constructing
    b = c; // copy constructing
}

Определенно намного быстрее копировать указатель вместо больших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...