在地图c ++中迭代并使用find()

时间:2011-10-19 20:34:14

标签: c++ map find

我有一张地图存储“作业”作为关键字,“名称”作为存储的值。

map<string, string>dutyAndJob; 
map<string,string>::iterator it; 

我基本上试图通过这张地图查看特定的“名称”。 如果名称不存在,则不应该进入此循环,但是,由于某些未知原因,它总是进入此循环:

string name = "Bob";

it = dutyAndJob.find(name);
if (it == dutyAndJob.end())
{
    cout << "Testing : " << name << endl;
}

由于某种原因,即使地图中没有存储Bob,它仍会进入此循环。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

if (it == dutyAndJob.end())  
{  
  cout << "Testing : " << name << endl;  
}  

应该是:

if (it != dutyAndJob.end()) // Does it refer to a valid association
{  
  cout << "Testing : " << name << endl;  
}  

请注意从==!=的更改,表示该密钥已在地图中找到。如果密钥,则迭代器it仅等于dutyAndJob.end()

答案 1 :(得分:0)

刚刚意识到Job是关键,而Name是数据。您具有结构化的方式,您只能在将检索名称的作业上使用find。

   string job = "Cashier";

   it = dutyAndJob.find(job);
   if (it == dutyAndJob.end())
   {
       cout << "Testing : " << job<< endl;
   }

如果您确实想按名称搜索,可能名称应该是键,而作业应该是数据?