多数の倍精度配列を扱いたいと思います。すべての配列の長さは同じです。 std :: arraysのstd :: vectorを使うことにしました。データのスケーリングのために、私はすべての値の最小値と最大値を見つける必要があります。どのように私がこれを行うことができたかは次の通りです:std :: arraysのstd :: vectorの比較関数
#include <algorithm>
#include <vector>
#include <array>
class ChannelData {
...
template<std::size_t N>
bool static compareX(std::array<double, m_nelem> const& a, std::array<double, m_nelem> const& b) {
return a[N] < b[N];
}
std::vector<std::array<double, m_nelem> > m_data;
std::array<<std::array<double, 2> m_nelem> m_minmax;
void find_minmax_x(){
for (int i = 0; i < m_nelem; i++){
auto minmax = std::minmax_element(m_data.begin(), m_data.end(), compareX<i>);
m_minmax[i][0] = (*minmax.first)[i];
m_minmax[i][1] = (*minmax.second)[i];
}
}
これはコンパイルされません。これは、関数find_minmax_x
のを、compareX<N>
をインスタンス化するために使用する非型パラメータが定数式ではないためです。
私の理解では、コンパイラはコンパイル時にインスタンス化するバージョンを知ることはできませんが、この場合はかなり明らかです。私がやったことは、for-loopを手動でアンロールすることでしたが、それは醜いです。これを達成するにはより美的な方法をお勧めしますか?
ニース書き込みを-アップ。最初の文章であなたが質問に答えたことを考慮して、あなたは上を行きました。個人的に私は 'order_by'の前にそれを置いていたでしょうが、それはやや良い感じです。 – vu1p3n0x