Сортировка вектора указателей - PullRequest
2 голосов
/ 18 февраля 2011

Мне нужно отсортировать коллекцию Element.Есть ли какое-то конкретное преимущество сортировки вектора Element*, т. Е.

std::vector<Element*> vectRef;

, для сортировки вектора Element.

std::vector<Element> vect;

при условии, что я напишу компаратор соответствующим образом.

Element структура показана ниже:

struct Element
{
    Record *elm;        

    Element(Record *rec)
    {
        elm = new Record();
        //...copy from rec
    }
    ~Element()
    {
        delete elm;
    }
};

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Сколько стоит конструктор копирования Element? Делает ли он глубокую копию содержимого объекта Record? Для сортировки vector<Element> потребуется много копий Element объектов, если swap не будет перегружен должным образом. Я не уверен, каковы правила относительно того, должен ли sort использовать swap и должен ли он использовать перегруженную версию пользователя swap; http://accu.org/index.php/journals/466 имеет некоторую информацию об этом. Сортировка vector<Element*> будет копировать только указатели, что, вероятно, будет дешевле. C ++ 0x меняет это, предполагая, что Element имеет эффективный конструктор перемещения и оператор присваивания перемещения.

0 голосов
/ 18 февраля 2011

Зависит от того, как выполняется копирование Element с.Как вы показали выше, Element содержит указатель на Record, но не определяет конструктор копирования. Если это правильно, копирование Element объектов должно быть дешевым и быстрым, поэтому вы получите мало или совсем ничего, сохраняя указатели на Element с.

В то же времяЯ должен отметить, что создание мелких копий может легко привести к ошибкам.Когда / если вы измените Element для глубокого копирования, вы можете получить гораздо больше от хранения и сортировки указателей вместо Element объектов (но это будет зависеть от того, насколько дорого будет копировать Record).

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