2011-08-25 14 views
6

Come posso sapere che l'equal_range non ha trovato alcun caso di corrispondenza?C++ multimap equal_range non trovato nulla

piace:

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{ 

    } 

Chiunque può aiutare?

Grazie

+0

Anche un commento non richiesto su ciò che è necessario, piuttosto che ciò che si desidera. È necessario internalizzare gli algoritmi, i parametri del contenitore e la filosofia di restituzione. Dovresti capire come la fine di un intervallo è internamente un puntatore dopo l'ultimo elemento. Potrebbero intimidirli a non confondere i puntatori con gli iteratori, ma IMHO è l'unico modo per chiunque di capire veramente l'interfaccia del contenitore e dell'algoritmo. –

risposta

18

:)

dicono le vostre dichiarazioni equal_range risultato di tipo pair

Se il result.first == result.second allora significa che non v'è nulla.

Se c'è anche un solo elemento poi result.first != result.second

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

Essenzialmente la stessa risposta di Ajeet :) ret.first == mapdic.end()

+1

Essenzialmente errato, 'result.first == result.second' è il test corretto, il test è troppo specifico. – john

+0

Cura di spiegare? – Carl

+1

Il test potrebbe essere falso quando il test di Ajeet è vero. Ad esempio se equal_range non trova nulla potrebbe restituire result.first == mapdic.begin() e result.second == mapdic.begin(), che sarebbe vero sotto il test di Ajeet ma falso sotto il tuo (assumendo che mapdic non sia vuoto) . – john