-1

我正在尝试使用 lower_bound 来确定值是否在指向结构的指针向量内。我在用

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

比较器功能看起来像

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

我想检查是否找到了具有所述 ID 的元素。我怎样才能检查它?我尝试使用

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

但这会引发分段错误,有什么方法可以检查元素是否已经存在?

4

1 回答 1

3

如果您只想检查对象是否存在,请使用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()了,那么取消引用是未定义的行为,这可能表现为分段错误。

于 2016-03-30T18:10:28.070 回答