在指针列表中查找项目

时间:2011-07-21 15:02:39

标签: c++ list find std

我试图了解如何使用std :: find

在C ++中的指针列表中查找项目

如果我有例如:

std::list<string> words;
std::string word_to_be_found;

我可以这样搜索:

std::list<string>::iterator matching_iter = std::find(words,begin(), words.end(), word_to_be_found)

但如果我有指针的话会怎么样?

std::list<string *> words;

上述语法将不再有效。我能以类似的方式做到吗?

谢谢!

3 个答案:

答案 0 :(得分:11)

您可以将谓词传递给std::find_if函数:

bool pointee_is_equal(const std::string& s, const std::string* p) {
    return s == *p;
}

// ...
std::list<string>::iterator matching_iter =
              std::find_if(words,begin(), words.end(),
                          std::bind1st(pointee_is_equal, word_to_be_found));

在C ++ 11中,由于lambdas,这变得更加容易:

auto matching_iter = std::find_if(words,begin(), words.end(),
                     [&word_to_be_found](const std::string* p) {
                         return word_to_be_found == *p;
                     });

答案 1 :(得分:3)

提供您自己的谓词:

struct comparator
{
  bool operator()(std::string const* item)
  {
    return toFind == *item;
  }
  std::string toFind;
};

comparator cinst = { word_to_find };
std::list<string*>::iterator matching_iter = std::find_if(words,begin(), words.end(), cinst)

答案 2 :(得分:2)

您想要使用std::find_if(),并为其提供一个仿函数来进行比较。