C++

【C++】std::list の検索には std::find を使う

 


まとめ

  • 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 でアクセスできる.

以上.

  • この記事を書いた人

GOTH

鹿児島県出身,吉祥寺在住の27歳.職業はゲーム会社でプログラマー.趣味はバイク,車,キャンプ,ガジェット,読書,そしてゲーム開発. サイトのテーマはプログラミングとガジェットでライフハック.たまに趣味に関する雑感や記録を残していく備忘録.ツイッターもやってます.
自己紹介
お問い合わせ

-C++