排序指针矢量

时间:2011-02-18 05:34:16

标签: c++ sorting vector

我需要对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 个答案:

答案 0 :(得分:2)

Element的复制构造函数有多贵?它是否包含所包含的Record对象的深层副本?排序vector<Element>将需要许多Element个对象的副本,除非swap正确重载。我不确定sort是否必须使用swap以及是否必须使用用户的swap重载版本的规则是什么; http://accu.org/index.php/journals/466有一些相关信息。排序vector<Element*>只会复制指针,这可能会更便宜。假设Element具有有效的移动构造函数和移动赋值运算符,C ++ 0x会更改此值。

答案 1 :(得分:0)

这取决于Element s的复制方式。如上所示,Element包含指向Record的指针,但未定义复制构造函数。 如果这是正确的,复制Element对象应该既便宜又快捷,所以通过存储指向Element的指针,你可以获得很少或没有。

与此同时,我必须指出,执行浅拷贝很容易引入错误。当/如果您更改Element进行深度复制时,您可能会从存储和排序指针而不是Element对象中获得更多收益(但这取决于复制{{{}的成本。 1}})。