2010-11-26 5 views
18

У меня есть вектор unordered_map, который сортируется на основе функции сравнения, которую я определил. Я хотел бы использовать бинарный поиск для поиска одного из значений с помощью функции сравнения. Однако бинарный поиск возвращает только bool, и мне нужен индекс/итератор результата. Что я мог сделать?Binary Search C++ STL

ответ

22
#include <algorithm> 
using namespace std; 

//!!!!! a must be sorted using cmp. Question indicates that it is.   
it = lower_bound(a.begin, a.end(), value, cmp); 

//Check that we have actually found the value. 
//If the requested value is missing 
//then we will have the value before where the requested value 
//would be inserted. 
if(it == a.end() || !cmp(*it, value)) 
{ 
    //element not found 
} 
else 
{ 
    //element found 
} 
15
#include <algorithm> 
using namespace std; 

it = lower_bound(a.begin, a.end(), value, cmp); 
+3

+1 или, возможно, upper_bound или equal_range – 2010-11-26 09:39:00

+2

-1 lower_bound не обязательно будет возвращать элемент. Если элемент отсутствует, он вернет элемент до того, как он будет, если бы он был в векторе. – T33C 2010-11-26 09:50:42