Sorting 对包含指向Struct与Struct的指针的向量进行排序

Sorting 对包含指向Struct与Struct的指针的向量进行排序,sorting,pointers,struct,Sorting,Pointers,Struct,我正在使用heapsort对一个包含结构的大向量进行排序,我的代码运行时非常慢。我现在想存储指向该结构的指针,而不是在向量中存储结构 我的问题是,在幕后,当我对事物进行排序时,实际发生了什么?如果我存储指向结构的指针,而不是存储结构本身,会不会更快 当然可以。将对象作为值存储在stl容器中会导致运行存储对象的复制构造函数 一般来说,为了提高性能,最好存储指针。然而,一旦使用指针,您需要更加小心泄漏和异常安全 无论如何,排序中最简单的事情就是交换算法。其中包括复制构造: void swap(T &

我正在使用heapsort对一个包含结构的大向量进行排序,我的代码运行时非常慢。我现在想存储指向该结构的指针,而不是在向量中存储结构


我的问题是,在幕后,当我对事物进行排序时,实际发生了什么?如果我存储指向结构的指针,而不是存储结构本身,会不会更快

当然可以。将对象作为值存储在stl容器中会导致运行存储对象的复制构造函数

一般来说,为了提高性能,最好存储指针。然而,一旦使用指针,您需要更加小心泄漏和异常安全

无论如何,排序中最简单的事情就是交换算法。其中包括复制构造:

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

复制指针而不是更大的对象肯定要快得多。

这可能取决于语言、编译器和执行环境,但一般来说,排序是通过一系列交换来实现的。交换指针通常非常便宜,而交换大型或复杂结构可能非常昂贵。对你的问题的真正答案是尝试两者并衡量结果。