回答編集履歴
2
typo
test
CHANGED
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
【別解】
|
84
84
|
|
85
|
-
catsforepawさんも同じ意味で理解されていようなの
|
85
|
+
catsforepawさんも同じ意味で理解されていようなので、間違ってないようでちょっと安心。
|
86
86
|
|
87
87
|
で、[メンバ変数へのポインタ](http://homepage2.nifty.com/well/Pointer.html#POINTER_TO_CLASS_MEMBER)を使ってより使いやすく書けました。
|
88
88
|
|
@@ -136,4 +136,4 @@
|
|
136
136
|
|
137
137
|
rank()関数の定義側は複雑ですが、使い方は随分すっきりできましたし、DataIn型にも依存してません。
|
138
138
|
|
139
|
-
m_mapAttackRank等のoperator[]に使える型のidメンバを持っていればOKです。この型も型推論に任せることができたので、uint64_tでなくても使えます。
|
139
|
+
m_mapAttackRank等のoperator[]に使える型のidメンバを持っていればOKです。この型も型推論に任せることができたので、uint64_tでなくても使えます。(unordered_map<>の指定で決まります。)
|
1
追加
test
CHANGED
@@ -75,3 +75,65 @@
|
|
75
75
|
});
|
76
76
|
|
77
77
|
```
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
---
|
82
|
+
|
83
|
+
【別解】
|
84
|
+
|
85
|
+
catsforepawさんも同じ意味で理解されていようなのて、間違ってないようでちょっと安心。
|
86
|
+
|
87
|
+
で、[メンバ変数へのポインタ](http://homepage2.nifty.com/well/Pointer.html#POINTER_TO_CLASS_MEMBER)を使ってより使いやすく書けました。
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
```C++
|
92
|
+
|
93
|
+
template<typename tData, typename tValueType, typename tMapKey>
|
94
|
+
|
95
|
+
void rank(std::vector<const tData*>& iData,
|
96
|
+
|
97
|
+
std::unordered_map<tMapKey, int>& oRank,
|
98
|
+
|
99
|
+
tValueType tData::*iValue)
|
100
|
+
|
101
|
+
{
|
102
|
+
|
103
|
+
std::sort(iData.begin(), iData.end(),
|
104
|
+
|
105
|
+
[&iValue] (const tData* l, const tData* r)
|
106
|
+
|
107
|
+
{
|
108
|
+
|
109
|
+
return (l->*iValue) > (r->*iValue);
|
110
|
+
|
111
|
+
});
|
112
|
+
|
113
|
+
for (int i = 0 , rank = 5 ; 0 < rank ; i++ , rank--)
|
114
|
+
|
115
|
+
{
|
116
|
+
|
117
|
+
// 数値が高い順に5~1のランクをつける。
|
118
|
+
|
119
|
+
oRank[iData.at(i)->id] = rank;
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
}
|
124
|
+
|
125
|
+
```
|
126
|
+
|
127
|
+
以下のようにして呼び出します。
|
128
|
+
|
129
|
+
```C++
|
130
|
+
|
131
|
+
rank(ref, m_mapAttackRank, &DataIn::attack);
|
132
|
+
|
133
|
+
rank(ref, m_mapDefenceRank, &DataIn::defence);
|
134
|
+
|
135
|
+
```
|
136
|
+
|
137
|
+
rank()関数の定義側は複雑ですが、使い方は随分すっきりできましたし、DataIn型にも依存してません。
|
138
|
+
|
139
|
+
m_mapAttackRank等のoperator[]に使える型のidメンバを持っていればOKです。この型も型推論に任せることができたので、uint64_tでなくても使えます。
|