Итерация и использование find () в карте c ++ - PullRequest
2 голосов
/ 20 октября 2011

У меня есть карта, хранящая «задание» в качестве ключа и «имя» в качестве значения, которое оно хранит.

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

Я в основном пытаюсь просмотреть эту карту на предмет определенного "имени". Если имя отсутствует, оно не должно входить в этот цикл, однако по неизвестной причине оно всегда входит в этот цикл:

string name = "Bob";

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

По какой-то причине он все равно будет входить в этот цикл, даже если на карте нет Боба.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

4 голосов
/ 20 октября 2011
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(), если ключ был , а не найден.

0 голосов
/ 20 октября 2011

Только что понял, что Иов - это ключ, а Имя - это данные.То, как у вас это структурировано, вы можете использовать только найти в Задании, которое будет извлекать Имя.

   string job = "Cashier";

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

Если вы действительно хотите искать по Имени, возможно, Имя должно быть ключом, а Заданиедолжны быть данные?

...