2012-02-12 10 views
0

ソート済みstd::vector<unsigned long long int> myvector(すべての値が異なります)があります。最初の要素のインデックス>は、STL :: algorithmを持つベクトルの数値に?

myvectorの最初のインデックスsize_t idx(イテレータではありません)の値を>MAX_UI32 = 4294967295Uに厳密に見つける最も短い方法は何ですか?例えば

:1行のコードでこれを達成するための方法

[1, 34, 83495, 4294967295, 4294967296, 104000000000] -> idx = 4 
[1, 34, 83495, 923834, 912834823, 4294967295] -> idx = 6 (= size of myvector) 

ありがとうございました。

答えて

3

upper_bounddistanceの組み合わせは、トリックを行う必要があります。そのような要素が存在しない場合

#include <algorithm> 
#include <iterator> 
#include <vector> 

std::vector<unsigned long long int> v; 

// ... 

return std::distance(v.begin(), 
        std::upper_bound(v.begin(), v.end(), MAX_UI32)); 

を、upper_bound戻りv.end()ので、あなたの結果はv.size()に等しくなります。

0

ちょうどあなたが使用できることを追加し、std::find_ifするのではなく、あなたが述語関数を記述する必要があり、その場合で:

bool IsBigger(unsigned long long int ull) { 
    return (ull > MAX_UI32); 
} 

std::vector<unsigned long long int>::iterator it = std::find_if(v.begin(), v.end(), IsBigger); 
size_t index = std::distance(v.begin(), it); 
関連する問題