stl容器中的搜索元素

时间:2012-06-14 10:07:38

标签: c++ boost stl

所以我一直在寻找一种在字符串列表中搜索字符串的方法。我编写了以下代码

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方法,但它在开始和结束时都有。理想的解决方案是整个容器。有一些相同的提升方法,但我不知道如何使用它们。你能给出一些关于通用搜索元素的boost查找的例子。

3 个答案:

答案 0 :(得分:4)

std::find可以接受开始和结束迭代器,这基本上决定了整个容器:

std::find(data.begin(), data.end(), str);

答案 1 :(得分:3)

使用Boost.Range

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

auto i = boost::find(container, value);
if (i != boost::end(container))
  doSomething(*i);

答案 2 :(得分:2)

为什么不使用类似的东西:

template <typename container, typename T>
bool contains(container& container, T& elt)
{
   return (std::find(container.begin(), container.end, elt) != container.end();
}