まとめ
- C++ の List の検索には std::find を使う
- std::find の使い方のメモ
c++ で std::list の検索をしたい
c++ の std::list の検索をする必要がある場面に出くわした.
std::list 内の検索は線形探索になるのでやや遅いため,
可能であれば避けたいところだが,
必要があるとなればやむを得ない.
find も contains もない
当然 list の機能として存在するものと思い,
std::list のメンバを見てみたのだが,
検索,に該当しそうなメソッドが見つからない.
find も contains もない.
線形探索で遅くなるためか,
あえて検索機能はデフォルトでは存在しないということと思われる.
C++ の傾向として,
遅い処理,危険な処理は面倒なようにできている.
そうとは知らずに軽い気持ちで使うのを避けるためだ.
std::find を使う
stack overflow で得た情報によると,
list の探索には std::find というものを使用する必要があるらしい.
std::find のリファレンス
cpprefjp.github.io
以下のように使う.
サンプルコード
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> l; l.push_back(0); l.push_back(1); l.push_back(2); auto result = std::find( l.begin(), l.end(), 1 ); if( result == l.end() ) { std::cout << "not found\n"; } else { std::cout << "found!\n"; } }
std::find の戻り値で
探索結果のイテレータが返ってくる.
含まれていなければ list.end() になるため,
それで含まれているかをチェックできる.
イテレータが返ってくるため,
要素には *result でアクセスできる.
以上.