2016-03-30 4 views
-1

lower_boundを使用して、値が構造体へのポインタのベクトル内にあるかどうかを調べようとしています。私は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; 
} 

を使用してみましたが、これはセグメンテーションフォールトを投げて、要素がすでにあるかどうかを確認する方法をどのような方法がありますか?あなただけ確認したい場合は

+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()を取得した場合は、そのデリファレンスをbに定義されていない。「また、あなたは終了イテレータ以外のものを得た場合最初チェックする必要がありますでしょうこれはセグメンテーション違反として現れる可能性があります。

関連する問題