我目前被困在尝试嵌套几个for循环。我将发布代码,然后解释它。
void IdeaBank::AND_searchQuery(string search_word1, string search_word2){
vector <int> match;
for (int i=0;i<newIdea.size();i++)
{
for (int j=0;j<newIdea[i].getKeyword().size();j++)
{
if ( (newIdea[i].getKeyword()[0] == search_word1) && (newIdea[i].getKeyword()[j] == search_word2) )
{
match.push_back(newIdea[i].getID());
}
if ( (newIdea[i].getKeyword()[1] == search_word1) && (newIdea[i].getKeyword()[j] == search_word2) )
{
match.push_back(newIdea[i].getID());
}
if ( (newIdea[i].getKeyword()[2] == search_word1) && (newIdea[i].getKeyword()[j] == search_word2) )
{
match.push_back(newIdea[i].getID());
}
}
}
for (int i=0;i<match.size();i++)
{
displayIdeaByID(match[i]);
}
}上面的代码做了什么,并检查两个关键字是否出现在相同的想法中,如果出现,则打印该想法。第一个循环遍历我所有的想法,第二个循环遍历1个想法的所有关键字。
我试图实现的是看看是否两个搜索词都出现在1想法的关键字中。
上面的代码通过检查匹配的所有关键字来正确工作,但它只基于3个关键字。用户输入的关键字也有n个。
我正在尝试找到一种更有效的方法来检查两个搜索词是否都在一个想法的关键字中。
发布于 2020-05-02 12:16:31
如果您正在搜索两个搜索词都在给定项目的关键字列表中的情况,则可以只使用std::find而不是内部循环。例如:
for (auto&& idea : newIdea)
{
const auto& keywords = idea.getKeywords();
bool found1 = std::find(keywords.begin(), keywords.end(), search_word1) != keywords.end();
bool found2 = std::find(keywords.begin(), keywords.end(), search_word2) != keywords.end();
if( found1 && found2 ) {
match.push_back(idea.getID());
}
}https://stackoverflow.com/questions/61554320
复制相似问题