6

equalアルゴリズムを使用して 2 つのセットを比較したいのですが、エラーが発生します。2つのセットが等しいかどうかを知るにはどうすればよいですか?

if(equal (a.begin(), a.end(), v.begin(), v.end())
4

2 に答える 2

12

簡単に言えばa == v多分a.size() == v.size() && a == v. それは可能な限り効率的です。(セット反復子はランダム アクセスではないため、明示的なサイズ チェックを使用する後者の形式の方が適切な場合があります。)更新: サイズ チェックは暗示されています [thanks @juanchopanza!]

于 2013-06-07T18:50:07.037 に答える
5

3 つの反復子と追加の述語を使用してstd::equalオーバーロードを呼び出している可能性があります。2 番目の末尾は終了イテレータとして解釈されず、述語として解釈されるため、そのままにしておきます。これはゴミです。

std::equal(a.begin(), a.end(), v.begin())

しかし、Markがこの場合のコメントで修正しているように、事前に両方のコンテナのサイズが一致していることを確認する必要があります。C++14 は実際にstd::equal4 つのイテレータ (意図したもの) を使用するオーバーロードを導入し、暗黙的にサイズ チェックを実行することに注意してください。ただし、実装ではまだこれをサポートしていないようです。

それ以外は、他の回答とコメントは、a == vはるかにシンプルで明確で合理化されているという点で正しいです。

于 2013-06-07T21:18:05.993 に答える