如何搜索所有地图键c ++

时间:2018-03-14 23:11:06

标签: c++ loops dictionary iterator

我想要实现的是一个基本的拼写检查程序,它读取输入文本文件并将单词与一个小字典进行比较。如果单词不在字典中,则假定拼写错误,然后提示用户正确拼写单词。这个正确拼写的单词与拼写错误的对应词一起存储在地图中。到目前为止,我已经能够做到这一切。我无法弄清楚的是如何遍历整个地图以检查该密钥(拼写错误的单词)是否已经存在,而不是每次都询问用户如果在地图的迭代中找不到拼写它?下面是我到目前为止的代码,它检查单词是否在字典中,询问用户如何拼写它,并将其添加到地图中。

std::map<std::string,std::string>::iterator p = m_Replacements.begin();
            bool isIn = m_Dictionary.find(oneWord) != m_Dictionary.end();
            std::map<std::string,std::string>::iterator found = m_Replacements.find(oneWord);

            if(found==m_Replacements.end())
            {
                if( isIn == false)
                {
                    osInputPrompt<<"How do you correctly spell " + oneWord + "\n";
                    isInputPrompt >> correctSpell;
                    m_Replacements.insert(make_pair(textWord,correctSpell));
                    osOutput<<correctSpell + " ";
                }
                else
                {
                    osOutput<<oneWord + " ";
                }

总而言之,我想在循环中添加另一个循环来检查单词是否在字典中然后检查整个地图以查看拼写错误的单词是否已经存在而没有询问“你如何正确拼写...“对于地图循环的每次迭代。仅仅是为了澄清我不是要问如何迭代地图,我已经知道如何做到这一点。提前致谢。

2 个答案:

答案 0 :(得分:0)

std::map<std::string,std::string>::iterator p;
std::string found;
for(p = m_repl.begin(); p != m_repl.end(); ++p)
{
     if(p->second == <what I am looking for>)
      {
         found = p->second;
         break;
     }
}

即遍历整个字典。更新的c ++版本具有更好的枚举sytax - 请参阅How to use range-based for() loop with std::map?

答案 1 :(得分:0)

陷入了我正在做的事情但我通过添加这样的布尔值来解决这个问题,以避免向用户询问循环的每次迭代

bool mapFound;
                    for(std::map<std::string,std::string>::iterator it = m_Replacements.begin(); it!= m_Replacements.end(); it++)
                    {
                        std::string word = it->first;
                        if(word == oneWord)
                        {
                            mapFound = true;
                        }
                    }