0

そこで、文字列のリストで文字列を検索する方法を探していました。私は以下をコーディングしました

bool contains(const std::list<std::string>& data, const std::string& str)
{
        std::list<std::string>::iterator i;
        for(i=data.begin(); i!=data.end(); ++i)
        {   
                if (str == *i) 
                        return true;
        }   

        return false;

}

これは非常に基本的なコードです。私はfind メソッドを知っていますが、それは start と end を取ります。理想的な解決策は、コンテナ全体を取ることです。同じ のブースト方法がいくつかありますが、それらの使用方法がわかりません。要素の一般的な検索のためのブースト検索の例を挙げていただけますか。

4

3 に答える 3

4

std::find基本的にコンテナ全体を決定する開始イテレータと終了イテレータを受け取ることができます。

std::find(data.begin(), data.end(), str);
于 2012-06-14T10:10:10.283 に答える
3

Boost.Rangeを使用します。

#include <boost/range/algorithm/find.hpp>

auto i = boost::find(container, value);
if (i != boost::end(container))
  doSomething(*i);
于 2012-06-14T10:50:31.240 に答える
2

this の行に沿って何かを使用しないのはなぜですか:

template <typename container, typename T>
bool contains(container& container, T& elt)
{
   return (std::find(container.begin(), container.end, elt) != container.end();
}
于 2012-06-14T10:10:58.910 に答える