对包含结构体指针的向量进行排序 VS 结构体

问题描述 投票:0回答:1

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

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

sorting pointers struct
1个回答
1
投票

答案已过时

更新:请注意,由于现代 C++ 的改进,这个答案的相关性值得怀疑。 C++11 或更高版本的 C++ 应该没有像进行那么多复制构造这样的问题。

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.