Как проверить, стоит ли мой итератор на пустом месте? - PullRequest
1 голос
/ 05 сентября 2010

Я использую мультикарту STL, я повторяю свою карту, и я не нашел нужный объект внутри карты, теперь я хочу проверить, содержит ли мой итератор то, что я хотел или нет, и у меня возникли трудности с этим, потому что это не нуль или что-то. спасибо!

Ответы [ 2 ]

8 голосов
/ 05 сентября 2010

Если он не находит нужную вещь, он должен быть равен итератору, возвращенному методом end() контейнера.

Итак:

iterator it = container.find(something);
if (it == container.end())
{
  //not found
  return;
}
//else found
0 голосов
/ 05 сентября 2010

Почему вы перебираете карту, чтобы найти что-то, вы должны пойти как ChrisW, чтобы найти ключ на карте ...

Ммм, вы пытаетесь найти значение на карте, а не ключ? Тогда вы должны сделать:

map<int, string> myMap;
myMap[1] = "one"; myMap[2] = "two"; // etc.

// Now let's search for the "two" value
map<int, string>::iterator it;
for( it = myMap.begin(); it != myMap.end(); ++ it ) {
   if ( it->second == "two" ) {
      // we found it, it's over!!! (you could also deal with the founded value here)
      break; 
   }
}
// now we test if we found it
if ( it != myMap.end() ) {
   // you also could put some code to deal with the value you founded here,
   // the value is in "it->second" and the key is in "it->first"
}
...