在vector <string> cocos2d-x </string>中找到一个单词

时间:2014-07-29 08:10:59

标签: c++ cocos2d-x

我有一个矢量word_list,我想在word_list中找到一个单词。我用函数

bool Mylayer::existWord(vector<string> word_list, string word)
{ 
    if (std::lower_bound(word_list.begin(), word_list.end(), word) != word_list.end())
    {
        return true;
    }
    return false;
}

但它找不到确切的结果。有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:7)

  • 您的方法应如下所示:

    bool Mylayer::existWord(
        const std::vector<std::string>& words,
        const std::string& word) const
    { 
        return std::find(words.begin(), words.end(), word) != words.end();
    }
    
  • 如果您的vector已排序,则可以使用std::binary_search

    bool Mylayer::existWord(
        const std::vector<std::string>& words,
        const std::string& word) const
    { 
        assert(std::is_sorted(words.begin(), words.end())); // debug check
        return std::binary_search(words.begin(), words.end(), word);
    }
    
  • 如果您的收藏品没有重复排序,您可以使用std::set<std::string> 你的方法变成了:

    bool Mylayer::existWord(
        const std::set<std::string>& words,
        const std::string& word) const
    { 
        return words.count(word) != 0;
    }
    

答案 1 :(得分:-1)

您可以尝试使用find

ideone链接:http://ideone.com/bgFZwU

bool existWord(vector<string> word_list, string word) {
    vector<string>:: iterator it;

    it= find(word_list.begin(), word_list.end(), word);
    if(it== word_list.end()) {
        return 0;
    } else {
        return 1;
    }
}