2016-09-18 1 views
0

次のコンパレータ関数を使用して、ペアのベクトルをソートします。ペアのベクトルでupper_boundを使用する方法。pair.secondの昇順に並べ替え、次にpair.first?

bool sortbysec(const pair<long long,long long> &a, 
      const pair<long long,long long> &b) 
{ 
    if(a.second < b.second) 
    { 
     return true; 
    } 
    else if(a.second==b.second) 
    { 
     if(a.first<b.first) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

今、私は与えられた値でpair.secondupper_boundをやりたいです。どのようにしてコンパレータ関数を書いて、最初のペアを得ることができるのですか?second = second elementがあり、最初は最低になります。

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

+0

プレーン関数の代わりにファンクタクラスを使用します。このクラスは完全なベクトルへの参照を保持することもできます。 –

+0

プレーン関数を使用することもできます。私は質問をしません。 –

答えて

0

std::lower_boundを入力してください。upper_boundではありません。このようなもの:

auto iter = std::lower_bound(
    your_contaner.begin(), 
    your_contaner.end(), 
    lookup_second, 
    [](const std::pair<long long,long long>& p, long long second) { 
     return p.second < second; 
    } 
); 
if (iter != your_contaner.end() && iter->second == lookup_second) { 
    // `iter` points to an element with given `second` and smallest `first`. 
    // Otherwise, there's no element with given `second`, and `iter` points 
    // to the leftmost larger element, or `end()`. 
} 
関連する問題