2016-09-07 14 views
0

私はC++でスーパー新しいですし、私は本当にこれで苦労しています:私はセットの私の第二の成分整理したい:2番目の値「double」にセット<pair <pair <int, int>、double >>>を並べ替える方法はありますか?

set< pair <pair<int, int>, double > > map 
int N_t = 10, N_r = 10; 
for (unsigned int i_t = 0; i_t < N_t; i_t++) 
{ 
for(unsigned int i_r = 0; i_r < N_r; i_r++) 
    { 
    Double_t dR = i_t*i_r ; 
    map.insert(make_pair(make_pair(i_r, i_t) ,dR)); 
    } 
} 

をそして私は、第二の成分をorganiceたいです。私はこれを試して、私はそれをする方法を知らない:

sort(map.begin(), map.end(), [](const pair<pair<int,int> &x, double>,const pair<pair<int,int>, double> &y) 
{ 
    return x.second < y.second; 
}); 

ありがとう!!

+0

連想コンテナ(セット、マップ、および順序付けられていないカウンターパート)はソートできません。 – NathanOliver

+1

ここをクリックしてください:http://en.cppreference.com/w/cpp/container/setあなたのセットはカスタムコンパレータを持つことができます。これで、あなたのセット内の "順序"と "ユニーク"とみなされるものを補完することができます – Hayt

+0

そして、 'std :: pair'のこの再帰的な使用ではなく、単に'タプル '要素を集約する単純な 'struct'ですか? – WhiZTiM

答えて

2

.secondのペアの要素に従ってソートする場合は、の前にdoubleを配置しないのはなぜですか?その後、彼らの最初の要素彼らの第二の要素によって注文のペアを並べ替え、これの代わりに、

set< pair <pair<int, int>, double > > map 

あなたはまた、私は、変数名などのキーワードを使用しないことをお勧め

set< pair <double, pair<int, int> > > map 

を使用することができます(mapは、内蔵のデータ構造ですC++で)

+0

ありがとうBenson!私はちょうど私が 構造体CMP { \tブール演算子()(CONST対<ペア、二重>&、constの対<ペア、二重>&B)を比較構造体を構築しなければならないことを理解 \t { \t戻り値a.second

0

ありがとうBenson!私は、比較する構造体を構築しなければならないことを認識しています。

s struct Cmp 
    { 
    bool operator()(const pair< pair<int, int>, double > &a, const pair< pair<int, int>, double > &b) 
    { 
    return a.second < b.second; 
    } 
    }; 
    set< pair< pair<int, int>, double > , Cmp> map; 

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

関連する問題