2016-08-24 26 views
6

geçiş verilen Verilen bir std::vector<int> verilen, C++ 11-STD fonksiyonları kullanarak, öğeleri negatifden olumluya geçiş indeksi bulmak istiyorum.Sıralanan vektör negatif için pozitif

İkili bir arama kullanarak bunu uygulayabileceğimin farkındayım, ancak standart aramada, bu araştırmayı kolaylaştıracak standart find_if benzeri bir işlev varsa ilgileniyorum (belki de doğru lambda ifadesiyle bağlantılı olarak)).

+0

mı? – Rakete1111

+1

@ Rakete1111: find_if doğrusaldır, ancak sorun LogN zamanında çözülebilir –

+0

@ Armen Tsirunyan True, bu bağlamda find_if'i nasıl kullanacağımı bile bilmiyorum – user695652

cevap

14

Sen lower_bound 0 bulmalısınız:

auto iter = std::lower_bound(vec.begin(), vec.end(), 0); 

çıkan yineleyici sen elemanlarının sıralamasını bozmadan 0 ekleyebilirsiniz erken pozisyona işaret edecektir. Benzer şekilde, upper_bound, en sağdaki böyle yineleyiciyi döndürür.

algoritmanın çalışma zamanı `std :: find_if` nesi var O(logN)

+0

koşuluna uyan ilk * öğe parlak! :) Teşekkürler – user695652

İlgili konular