Saya memerlukan algoritma pencarian biner yang kompatibel dengan wadah C ++ STL, seperti std::binary_search
di <algorithm>
header perpustakaan standar , tetapi saya membutuhkannya untuk mengembalikan iterator yang menunjuk pada hasil, bukan boolean sederhana yang memberi tahu saya jika elemen itu ada.
(Sebagai catatan tambahan, apa yang dipikirkan komite standar ketika mereka mendefinisikan API untuk binary_search ?!)
Perhatian utama saya di sini adalah bahwa saya memerlukan kecepatan pencarian biner, jadi meskipun saya dapat menemukan data dengan algoritme lain, seperti yang disebutkan di bawah ini, saya ingin memanfaatkan fakta bahwa data saya diurutkan untuk mendapatkan manfaat dari biner pencarian, bukan pencarian linier.
sejauh ini lower_bound
dan upper_bound
gagal jika datum hilang:
//lousy pseudo code
vector(1,2,3,4,6,7,8,9,0) //notice no 5
iter = lower_bound_or_upper_bound(start,end,5)
iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6
Catatan: Saya juga baik-baik saja menggunakan algoritme yang tidak termasuk dalam namespace std asalkan kompatibel dengan container. Seperti, katakanlah boost::binary_search
,.