Sizin için iyi çalışıyor çünkü öğeniz mevcut.
lower_bound
birinci eleman verilen değerden daha küçük olmayan için bir yineleme döndürür ve upper_bound
birinci eleman verilen değerden daha büyük bir yineleyici döndürür.
kullanımı equal_range
da upper_bound
(bilgisayar almak için: dizi 1, 2, 3, 3, 4, 6, 7
Verilen
, lower_bound(..., 5)
Dolayısıyla 6. , değeri mevcut olup olmadığının kontrol edilmesi için iki yol işaret bir yineleyici döndürür Ayrı ayrı lower_bound
ve upper_bound
büyük olasılıkla suboptimal olacaktır). Sınırlar arasındaki std::distance
, 0'dan büyükse, öğe bulunur.
1, 2, 3, 3, 4, 6, 7
std::distance(std::lower_bound(v.begin(),v.end(),5), std::upper_bound(v.begin(),v.end(),5)) == 0 // 6 is absent
std::distance(std::lower_bound(v.begin(),v.end(),3), std::upper_bound(v.begin(),v.end(),3)) == 2 // 3 is present
- (
!=
ve <
tutarlı olan operatörler sağlanan) sizin değeri ile yineleyici tarafından işaret elemanı karşılaştırın, ama bunu son yineleyici vermediğinden emin olmak gerekir. lower_bound
beri Ayrıca
*(std::lower_bound(v.begin(), v.end(), 5)) != 5
, eleman bulunamadığı takdirde
end
dönmek tutarsız olacak bir ikili arama algoritmaları olduğunu. Aslında, bu algoritma tarafından döndürülen yineleyiciler, örneğin bir sonraki ekleme işlemi için bir ipucu olarak kullanılabilir.
Kitapta bu noktada bağlam nedir? Kitabın ne hakkında konuştuğunu bilmeden kafa karıştırıcı. Sette bir değer bulunup bulunmadığını görmek için 'lower_bound' kullanıldığını mı söylüyor? – Justin