0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C++で、ある要素がコンテナに含まれるかどうか調べるには

Last updated at Posted at 2023-08-08

こんにちは。Qiitaに投稿するのは初めてです。拙いかもしれませんが、説明力の向上のため、定期的に記事を投稿したいと思います。自分が興味を持っていることや学んだことを気が向いたときに投稿していきます。

結論から申しますと、

std::find(vec.begin(),vec.end(),val) != vec.end();

と書けばよいです。vecはvectorクラスのオブジェクトで、valは調べたい値です。vecの代わりに他のコンテナクラスのオブジェクトを入れても大丈夫です。コンテナクラスというのは、vectorやlist、mapなどのように、同じ型のデータを複数入れることのできる入れ物だと思ってもらえればよいです。

beginメソッドは、そのコンテナの先頭要素のイテレータを返します。イテレータについてはまだ説明できるほど理解してないのですが、場所のようなものだと思ってもらえればよいです。endメソッドは、そのコンテナの末尾の要素の次のイテレータを返します。末尾の要素のイテレータではない点に注意してください。

上のコードでfindメソッドは、vec.begin()からvec.end()までのイテレータの中でvalがないかどうか探しています。valがあればvalがある最初のイテレータを返します。valがなければvec.end()を返します。なので、findメソッドの返り値がvec.end()でなければvalがvecの中にあることが言えるわけです。

これで、ある要素がコンテナに含まれるかどうかは上のコードで確認できることが分かりました。

一応、他の方法としては、要素数を数えるcountメソッド

std::count(vec.begin(),vec.end(),val);

を用いてvecに含まれるvalの要素数が0であるか、そうでないかを調べる方法もあります。ただ、0かそうでないかを調べるのに要素数を数え上げるというのがオーバーキル感があって自分としてはあんまり感覚に馴染まないです。

今回はこれで終えたいと思います。ありがとうございました。

0
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?