<algorithm>
の中にstd :: containerが何かを含んでいるかどうかをチェックできるようにするものがありますか?あるいは、作り方、例えば:
if(a.x == b.x && a.y == b.y)
return true;
return false;
キーを使用するので、これはstd::map
でのみ可能ですか?
ありがとう
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 */
}
要素の検索が重要な場合は、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()...
のようなことをする必要がなくなります。
質問を参照してください。 std :: vector内の項目を見つける方法?
デフォルトのものが「深い」等価性テストに十分でない場合は、オブジェクトに適したoperator==()
を実装したことを確認する必要もあります。