2011-08-25 9 views
6

¿Cómo puedo saber que equal_range no encontró ningún caso coincidente?C++ multimap equal_range no encontró nada

gustan:

multimap<string,string> mapdic; 
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret; 
// insert some string pairs 


ret=mapdic.equal_range(thisUpperCaseName); 


    if (???)//how to test equal_range find nothing? 
    {  
}else{ 

    } 

Cualquiera puede ayudar?

Gracias

+0

También un comentario no solicitado sobre lo que necesita en lugar de lo que desea. Debe internalizar los algoritmos y los parámetros del contenedor y la filosofía de devolución. Debes entender cómo el final de un rango es internamente un puntero después del último elemento. Es posible que te intimiden para que no confundas los punteros con los iteradores, pero en mi humilde opinión es la única forma en que cualquiera puede comprender realmente la interfaz del contenedor y el algoritmo. –

Respuesta

18

:)

dicen sus declaraciones de equal_range resultado de tipo pair

Si su result.first == result.second entonces significa que no hay nada.

Si hay incluso un solo elemento continuación result.first != result.second

if(ret.first == ret.second) 
{ 
// empty range 
} 
else 
{ 
    //at least an element. 
} 
-1

En esencia, el mismo que la respuesta de ajeet :) ret.first == mapdic.end()

+1

Esencialmente incorrecto, 'result.first == result.second' es la prueba correcta, su prueba es demasiado específica. – john

+0

¿Cuidar para explicar? – Carl

+1

Su prueba podría ser falsa cuando la prueba de Ajeet sea cierta. Por ejemplo, si equal_range no encuentra nada, podría devolver result.first == mapdic.begin() y result.second == mapdic.begin(), eso sería cierto bajo la prueba de Ajeet pero falso bajo la tuya (suponiendo que mapdic no esté vacío) . – john