2017-05-01 8 views
0

私はC++プログラムでlower_bound関数を実装しようとしていますが、問題は次にあります:ベクトルでうまく動作しますが、ペアのペアのベクトルを持つ場合、下限バイナリ検索を行うには

私はペアの1つのベクトルを持っていると私は最初のペアの最初のメンバーを検索したいと私たちは同じ値を持つ複数の値を持っている場合、私は、例えば、第二の値の最小を返すようにしたい:

ペアのベクトルが次のようになっているとします。

v = {(1,1),(2,1),(2,2),(2,3),(3,4),(5,6)}; 

値K = 2を検索していますが、ペアの2番目の値が1で1が最小であるため、位置1(配列が0の場合)を返したいとします。

どのように私は最も簡単な方法でこれを実装することができ、私はこれを実装しようとしたが、それはコンパイルに失敗し、ここに私のコードです:つまり

vector<pair<int,int> >a,b; 
void solve() { 
sort(b.begin(), b.end()); 
sort(a.begin(), a.end()); 

vector<int>::iterator it; 
for(int i=0;i<a.size();i++) { 
    ll zero=0; 
    int to_search=max(zero, k-a[i].first); 

    it=lower_bound(b.begin(), b.end(), to_search); 
    int position=it-b.begin(); 

    if(position==b.size()) continue; 
    answer=min(answer, a[i].second+b[position].second); 
} 
} 

私は最初の値を検索するんだけど、もしそこにその値の方が2番目の要素が最も小さいものを返します。

ありがとうございます。ペアの

+0

を使用することができますので、あなたはどのようなエラーが出るのですか? – user463035818

答えて

1

少ないオペレータの作業、あなたが直接

std::lower_bound(v.begin(), v.end(), std::make_pair(2, std::numeric_limits<int>::min())); 
関連する問題