0

私の順列は一意の数字のペアです。リストを調べて、特定の順列が発生した回数をカウントする必要があります。だから私はそれをデータ構造に記録する必要があります。

(1,1) 0
(1,2) 5
(1,3) 3
(2,2) 5
(2,3) 2
(3,3) 1

最終的に、このコンテナーを降順で並べ替えて、最大回数発生する順列を取得できるようにする必要があります。どうもありがとう!!

4

2 に答える 2

0

ペアから int への順序付けられていないマップを作成するだけです (int で十分であると仮定すると、long または任意の大きな整数が必要になる場合があります)。キーが既に存在する場合は値をインクリメントし、そうでない場合は値を 1 に設定します。

于 2012-12-06T16:19:44.443 に答える
0

を使用しstd::map<std::pair<int, int>, int>ます。次のように挿入します。

std::map<std::pair<int, int>, int> myMap;
typedef std::map<std::pair<int, int>, int>::iterator Iterator;
// Insert "permutation" (0,1) with a default of 0 uses
Iterator it=myMap.insert(std::make_pair(std::make_pair(0, 1), 0)).first;
++it->second; // Increment use count - will use old count if already there

後で並べ替える必要さえありません。挿入するたびに現在の最大値をいつでも記録できます。

インサートの外側のペアには、使用回数のデフォルト値があることに注意してください。要素がまだマップにない場合、これは 0 に設定されます。したがって、順列が既に存在する場合はマップ要素を見つけ、それ以外の場合はそれを挿入して使用カウントをゼロに設定します。次に、いずれかの方法でインクリメントします。

于 2012-12-06T16:20:15.707 に答える