2012-03-20 30 views
0

構造体を含む大きなベクトルをheapsortでソートしています。コードの実行時間が非常に遅いです。ベクトルに構造体を格納する代わりに、構造体へのポインタを今すぐ格納したいと思います。ポインタを含むベクトルを構造体VS構造体にソート

私の質問は、物事を並べ替えると実際に何が起こっているのですか?構造体自体を格納するのではなく、構造体へのポインタを格納すると速くなりますか?

+0

これは言語、コンパイラ、実行環境によって異なる場合がありますが、一般的にソートは一連のスワップによって実装されます。ポインタの交換は通常非常に安価ですが、スワッピング(大規模または複雑な)構造体はかなり高価になります。あなたの質問に対する本当の答えは、両方を試して結果を測定することです。 – Mankarse

答えて

0

確かにはい。オブジェクトを値としてstlコンテナに格納すると、ストアドオブジェクトのコピーコンストラクタが実行されます。

一般に、パフォーマンスを向上させるために、代わりにポインタを格納することをお勧めします。しかし、代わりにポインタを使用すると、リークと例外の安全性についてもっと注意する必要があります。

とにかく、並べ替えで起こる最も簡単なことは、スワップアルゴリズムです。

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

大きなオブジェクトではなくポインタをコピーする方がはるかに高速です。

関連する問題