0
構造体を含む大きなベクトルをheapsortでソートしています。コードの実行時間が非常に遅いです。ベクトルに構造体を格納する代わりに、構造体へのポインタを今すぐ格納したいと思います。ポインタを含むベクトルを構造体VS構造体にソート
私の質問は、物事を並べ替えると実際に何が起こっているのですか?構造体自体を格納するのではなく、構造体へのポインタを格納すると速くなりますか?
構造体を含む大きなベクトルをheapsortでソートしています。コードの実行時間が非常に遅いです。ベクトルに構造体を格納する代わりに、構造体へのポインタを今すぐ格納したいと思います。ポインタを含むベクトルを構造体VS構造体にソート
私の質問は、物事を並べ替えると実際に何が起こっているのですか?構造体自体を格納するのではなく、構造体へのポインタを格納すると速くなりますか?
確かにはい。オブジェクトを値としてstlコンテナに格納すると、ストアドオブジェクトのコピーコンストラクタが実行されます。
一般に、パフォーマンスを向上させるために、代わりにポインタを格納することをお勧めします。しかし、代わりにポインタを使用すると、リークと例外の安全性についてもっと注意する必要があります。
とにかく、並べ替えで起こる最も簡単なことは、スワップアルゴリズムです。
void swap(T & a, T & b)
{
T c = a; // copy constructing
a = b; // copy constructing
b = c; // copy constructing
}
大きなオブジェクトではなくポインタをコピーする方がはるかに高速です。
これは言語、コンパイラ、実行環境によって異なる場合がありますが、一般的にソートは一連のスワップによって実装されます。ポインタの交換は通常非常に安価ですが、スワッピング(大規模または複雑な)構造体はかなり高価になります。あなたの質問に対する本当の答えは、両方を試して結果を測定することです。 – Mankarse