在指针列表中查找一个项目

8
我正在尝试理解如何在指针列表中使用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个回答

12

您可以将谓词传递给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дёӯпјҢз”ұдәҺжңүlambdaиЎЁиҫҫејҸзҡ„еӯҳеңЁпјҢиҝҷеҸҳеҫ—жӣҙеҠ е®№жҳ“дәҶпјҡ

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

这样的代码也能工作吗? using namespace boost::lambda; find_if(words.begin(), words.end(), *_1 == word_to_be_found);) - ouroboros84
是的,那也可以(当然最后括号不能少😉)。 - R. Martinho Fernandes

4
提供自己的谓词:
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
你需要使用std::find_if(),并提供一个函数对象来进行比较。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接