2016-03-30 2 views
-1

Я пытаюсь использовать lower_bound, чтобы узнать, находится ли значение внутри вектора указателей на struct. Я используюнайти возвращаемое значение lower_bound

auto it = lower_bound(myVector.begin() , myVector.end() , value , comparer()); 

функция Comparer выглядит

struct comparer 
{ 
    bool operator()(Property * ms, int const i) const 
    { 
     return ms -> ID < i; 
    }; 
}; 

и я хочу, чтобы проверить, если элемент с указанным ID был найден. Как я могу это проверить? Я попытался с помощью

if((*it) -> ID == value) { 
    return false; 
} 

, но это бросает ошибку сегментации, есть ли способ, как проверить, если элемент уже есть?

+1

http://stackoverflow.com/a/36269410/12711 может помочь. –

ответ

2

Если вы просто хотите проверить если объект существует, используйте std::binary_search:

bool exists = std::binary_search(myVector.begin(), myVector.end(), value, comparer()); 

Тем не менее, если вы хотите итератор, вам нужно не только проверить, если значение совпадает, а вы будет также должны первых проверки, если у вас есть что-то другое, чем конечный итератор:

auto it = std::lower_bound(myVector.begin(), myVector.end(), value, comparer()); 
if (it != myVector.end() && (*it)->ID == value) { 
    return false; 
} 

Если вы получаете end(), то, что разыменования не определенно б которое может проявляться как ошибка сегментации.