我正在尝试使用lower_bound来查明value是否在指向struct的指针向量内。我正在使用
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;
}
但是这会引发分段错误,有没有办法检查元素是否已存在?
答案 0 :(得分: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()
,则该取消引用是未定义的行为,可能表现为分段错误。