web-dev-qa-db-ja.com

std :: vectorに特定のオブジェクトが含まれているかどうかを確認しますか?

可能な重複:
std :: vectorの中の項目を見つけるにはどうすればいいですか?

<algorithm>の中にstd :: containerが何かを含んでいるかどうかをチェックできるようにするものがありますか?あるいは、作り方、例えば:

if(a.x == b.x && a.y == b.y)
return true;

return false;

キーを使用するので、これはstd::mapでのみ可能ですか?

ありがとう

229
jmasterx

vに要素xが含まれているかどうかをチェックします。

#include <algorithm>

if(std::find(v.begin(), v.end(), x) != v.end()) {
    /* v contains x */
} else {
    /* v does not contain x */
}

vが要素を含んでいるかどうかのチェック(空ではない):

if(!v.empty()){
    /* v is non-empty */
} else {
    /* v is empty */
}
453
You

要素の検索が重要な場合は、std::setの代わりにstd::vectorをお勧めします。これを使う:

std::find(vec.begin(), vec.end(), x)はO(n)時間で実行されますが、std::setはO(log n)時間で実行されるそれ自身のfind()メンバー(つまりmyset.find(x))を持っています。

std::setはまた、追加されたすべての要素が一意であることを保証します。これにより、if not contained then Push_back()...のようなことをする必要がなくなります。

89
AshleysBrain

質問を参照してください。 std :: vector内の項目を見つける方法?

デフォルトのものが「深い」等価性テストに十分でない場合は、オブジェクトに適したoperator==()を実装したことを確認する必要もあります。

11
NeilDurant