タプルのベクトル内の要素の1つの最大値を見つけるための簡潔な方法があるかどうかは疑問でした。例えば次のように、タプルのベクトルでタプルの最大の第2の値を探したいとします。タプル要素の最大値を見つけるC++
vector<tuple<int, int>> foo = { {12,1},{12,5},{5,6} };
結果は、私が何かのようになりますこれを行うことができます6.
一つの方法として次のようになります。
vector<double> allFoo;
for (int i = 0; i != size(foo); i++) {
allFoo.emplace_back(get<1>(foo[i]));
}
double maxVal = *max_element(allFoo.begin(), allFoo.end());
私は、しかし感じているあなたは、本質的に二回、この事を反復処理しているので、はるかに簡単に行うことができますか?カスタム述語と
私のタプルのスキルが少し限られていると、あなたがfooで直接max_elementのいくつかの種類を行うことができるはずのようにそれはそう...
'tuple'を 'array 'に置き換えるのはどうですか?また、 'find_if'を利用したいかもしれません。 –
VTT
適切な 'bool演算子<(const tuple&、const tuple &)'を持っていると仮定して '* max_element(begin(allFoo)、end(allFoo));もしあなたがそうでなければ、第3引数として比較関数(lambda)を 'max_element'に渡すことができます(おそらく演算子よりも綺麗です)。 –
nwp