2016-03-30 31 views
-1

Değerin struct'e işaret eden bir vektör içinde olup olmadığını öğrenmek için bir lower_bound kullanmaya çalışıyorum. Ben ile eleman kimliği tespit edildi sözü olmadığını kontrol etmek ve alt_bound'un geri dönüş değerini bulma

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

gibi

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

karşılaştırıcısı işlevi görünüyor kullanıyorum. Nasıl kontrol edebilirim? Ben

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

ama bu segment hataya atıyor, eleman zaten varsa nasıl kontrol için herhangi bir yolu var mı kullanmayı denediniz? Sadece kontrol etmek isterseniz

+1

http://stackoverflow.com/a/36269410/12711 yardımcı olabilir. –

cevap

2

nesne var eğer std::binary_search kullanın: Eğer yineleyici istiyorsanız, sadece kontrol etmek gerekir, dedi

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

eğer değer eşleştiği halde Eğer son yineleyici dışında bir şey varsa 'da ilk çek gerekecek:

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

sen end() olsun, o zaman o KQUEUE tanımsız b segmentasyon hatası olarak ortaya çıkabilen davranış.

İlgili konular