迭代std地图并比较文本

时间:2014-07-29 21:40:20

标签: c++ map

我目前正是这样的事情

std::map<std::string,std::string>::iterator it ;
for(it=mmap.begin();it!=mmap.end();it++)
{
    if(it->second.c_str() != "qa" && it->second.c_str() != "qb")
    {
        //Entered
    }
}

现在这个代码的问题是,即使迭代器是

,它也会进入输入的部分
it("Testing this","qb")

以上是指it->second = "qb"

现在我的问题是为什么代码会进入if语句if it->second = "qb"我的想法是它不应该有,因为条件语句部分是it->second.c_str() != "qb"

2 个答案:

答案 0 :(得分:3)

问题是因为it->second.c_str() != "qa"不是比较C字符串的正确方法(它比较指针而不是字符串内容)。但是,在比较之前,您不需要先转换为C字符串,因为您可以直接将字符串与it->second != "qa"进行比较。如果由于某种原因需要使用c_str()的c字符串,那么您需要使用strcmp

答案 1 :(得分:3)

c_str()是一个字符数组(指针),所以你要比较两个不同的指针。

改为使用字符串对象:

std::string QA("qa");
std::string QB("qb");
std::map<std::string,std::string>::iterator it ;
for(it=mmap.begin();it!=mmap.end();it++)
{
    if(it->second != QA && it->second  != QB)
    {
        //Entered
    }
}

或实际做C风格的字符串比较:

    if ( strcmp(it->second.c_str(), "qa") != 0 && strcmp(it->second.c_str(), "qb") != 0 )