2011-08-25 18 views
6

equal_range herhangi bir eşleşme örneği bulamadıklarını nasıl bilebilirim?C++ multimap equal_range hiçbir şey bulamadı

gibi:

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{ 

    } 

Herkes yardımcı olabilir?

Teşekkür

+0

Bunun yerine ne istediğinizi daha gerekenler hakkında istenmeyen bir yorum olarak aynı olması durumunda. Algoritmaları ve içerme parametresini ve geri dönüş felsefesini içselleştirmelisiniz. Bir aralığın sonunun dahili olarak son elemandan sonra nasıl bir işaretçi olduğunu anlamalısınız. İmleci ile işaretçileri karıştırmamak için sizi eğlendirebilirler, ancak IMHO, herkesin konteyner ve algoritma arayüzünü gerçekten anlamasını sağlayan tek yoldur. –

cevap

18

:)

senin o zaman hiçbir şey olmadığı anlamına gelir result.first == result.second Eğer equal_range döner

tip pair ait neden söylüyorlar.

bile tek unsur sonra result.first != result.second

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

Ajeet cevabı :) ret.first == mapdic.end()

Ayrıca
+1

Esasen yanlış, 'result.first == result.second' doğru testtir, testiniz çok spesifik. – john

+0

Açıklamak ister misiniz? – Carl

+1

Ajeet'in testi doğru olduğunda testiniz yanlış olabilir. Örneğin, equal_range hiçbir şey bulamazsa, sonuç result.first == mapdic.begin() ve sonuç.second == mapdic.begin() ifadesini döndürürse, bu Ajeet'in testi altında doğru olur ancak sizinkiçin yanlış olur (mapdic boş değil). . – john