複数ある冗長なソート処理を、各パラメータの条件式を引数にした
メソッドにまとめたいです。
下記は攻撃力や防御力といったパラーメータが高い順に、
5〜1のランク付をするプログラムです。
現状、ランクを定数で5としていますが、変更が考えられます。
どのように解決したら良いでしょうか。
宜しくお願いします。
C++
1 2 std::vector<const DataIn*> ref; 3 std::unordered_map<uint64_t, int> m_mapAttackRank; // キー:id, 値:ランク 4 std::unordered_map<uint64_t, int> m_mapDefenceRank; // キー:id, 値:ランク 5 6 /*! 7 *中略 8 */ 9 10 // attack順にソート 11 std::sort(ref.begin(), ref.end(), 12 [] (const DataIn* l, const DataIn* r) 13 { 14 return l->attack > r->attack; 15 }); 16 for (int i = 0 , rank = 5 ; 0 < rank ; i++ , rank--) 17 { 18 // 数値が高い順に5~1のランクをつける。 19 m_mapAttackRank[ref.at(i)->id] = rank; 20 } 21 22 // defence順にソート 23 std::sort(ref.begin(), ref.end(), 24 [] (const DataIn* l, const DataIn* r) 25 { 26 return l->defence > r->defence; 27 }); 28 for (int i = 0 , rank = 5 ; 0 < rank ; i++ , rank--) 29 { 30 // 数値が高い順に5〜1のランクをつける。 31 m_mapDefenceRank[ref.at(i)->id] = rank; 32 } 33 34 /*! 35 *以下、attackやdefenceと同様に、 36 *magicやvitalityなどのパラメータもソート。 37 */ 38
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/04 08:07