C での基本的な実装に対して、C++ と Python の標準ライブラリ (キューとヒープ) の間で簡単なパフォーマンス テストを行いました。これが私が使用したものです。
- Python 2.7.5 :: アナコンダ 1.7.0 (x86_64)
- i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1
- ソートする要素は int です。
キュー構築セグメントでのパフォーマンスの違いについては驚くことではありません (要素の配列からソートされたヒープを作成することを意味します)。
ここに奇妙なことがあります。何か不足しているかどうかわかりません... なぜ C++ は要素の抽出に時間がかかるのですか? これは、C++ でプライオリティ キューを構築する適切な方法ですか?
私の実装はPythonでは次のようになります
# Construct the queue
heapq.heapify(int_values)
# Extract element
heapq.heappop(int_values)
C++ の場合:
// Construct the queue
std::priority_queue<int, std::vector<int>, std::greater<int> > mypq (int_values, int_values+elements);
// Extract element
mypq.pop();
完全な C++ コードと、時間を測定する方法を次に示します。 https://gist.github.com/srodrb/6916802
Python コードは次のとおりです: https://gist.github.com/srodrb/6917081
編集: C++ コードを最適化するふりをしていないことに注意してください。標準ライブラリのツールをすぐにテストしているため、この比較は有効です。私はその巨大なパフォーマンスのギャップについてだけ疑問に思っています。また、おそらく heapq がいくつかの C 関数を呼び出すため、C++ と Python を対比していません。