Tôi cần một thuật toán tìm kiếm nhị phân tương thích với các vùng chứa C ++ STL, giống như std::binary_search
trong tiêu <algorithm>
đề của thư viện chuẩn , nhưng tôi cần nó để trả về trình lặp trỏ đến kết quả, chứ không phải một boolean đơn giản cho tôi biết liệu phần tử có tồn tại hay không.
(Một lưu ý nhỏ, ủy ban tiêu chuẩn đã nghĩ cái quái gì khi họ định nghĩa API cho binary_search ?!)
Mối quan tâm chính của tôi ở đây là tôi cần tốc độ của tìm kiếm nhị phân, vì vậy mặc dù tôi có thể tìm dữ liệu bằng các thuật toán khác, như đã đề cập bên dưới, tôi muốn tận dụng thực tế là dữ liệu của tôi được sắp xếp để có được lợi ích của một tệp nhị phân tìm kiếm, không phải là tìm kiếm tuyến tính.
cho đến nay lower_bound
và upper_bound
không thành công nếu thiếu dữ liệu:
//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
Lưu ý: Tôi cũng ổn khi sử dụng thuật toán không thuộc không gian tên std miễn là nó tương thích với vùng chứa. Như, nói boost::binary_search
,.