2014-04-11 16 views
5

Mesela ben std::set değerlerin belirledik:STL ayarlı arama anahtarının altındaki ilk değer nasıl bulunur?

{1, 2, 3, 5, 6} 

Ve arama anahtarı, ilk val bulmak istiyorum, bu 4 olalım. arama anahtarından daha az, bu durumda 3, nasıl yapılır? Basitçe bu anahtarın lower_bound bulmak ve bir kez olarak azaltmak TreeSet

+0

En büyük değer arama anahtarından daha az olmalıdır. – GoldRoger

+1

Zaten hem std :: map' hem de std :: set' ile birlikte çalışan bir şablon var. http://stackoverflow.com/a/529916/817441 – Ixanezis

cevap

1

orada Java ediyoruz fonksiyonları greater(), lower() yılında

Sen lower_bound kullanabilir ve daha sonra geri yani

auto it = set.lower_bound(4); 
if(it != set.begin()) 
{ 
    --it; 
} 
else 
{ 
    //Add error handling 
} 
+0

Eğer 'lower_bound', – Ixanezis

+0

@Ixanezis öğesinin ilk öğesini döndürürse, bu bir istisna ile sonuçlanır: Evet, düzenlenmiş. – Naveen

+2

@Naveen 'set',' C++ 'değişkenindeki bir değişken ismidir. 'Auto' kullanımını severim. Yorum ekleyerek düşünebilirsiniz bu C++ 11 çözümdür. –

12

birini gidin.

set<int> a; 
set<int>::iterator it = a.lower_bound(5); 
if (it != a.begin()) { 
    it--; 
    cout << *it << endl; 
} else { 
    cout << "No smaller element found!" << endl; 
} 

Tam bir örnek here bulabilirsiniz.

+1

"Bir tarafından azaltma" demek biraz gereksiz. Yineleyicileri ayarlama rasgele erişim değildir, onları 2 ile azaltamazsınız ('- = 2' bile derleme yapmaz). – MSalters