找到lower_bound的返回值

时间:2016-03-30 18:02:34

标签: c++ lower-bound

我正在尝试使用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;
}

但是这会引发分段错误,有没有办法检查元素是否已存在?

1 个答案:

答案 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(),则该取消引用是未定义的行为,可能表现为分段错误。