私はQVector<float>
を持っており、その中から最良の(最小)N値へのイテレータ/ポインタの配列を取得する必要があります。できればSTLアルゴリズムを使用して、どうすればいいですか?おそらく、これらの線に沿ってベクトル内のN個の最小値のインデックス
0
A
答えて
2
何か、:
QVector<float> data; // populated somehow
int N; // some value <= data.size()
std::vector<int> indices;
int i = 0;
std::generate_n(std::back_inserter(indices), data.size(),
[&i]() { return i++; });
std::partial_sort(indices.begin(), indices.begin() + N, indices.end(),
[&data](int ind1, int ind2) { return data[ind1] < data[ind2]; });
/* Now indices[0] through indices[N-1] contain indices
of the N smallest elements in data. */
2
希望どおりに最高のNの指数(値のみではない)のベクトルを与えるための簡単な方法があります。
Igorの答えとよく似ていますが、N個の最良インデックスを持つ結果ベクトルが得られます。
このコードは、あなたがリクエストしたのと同じように、本当にシンプルであり、STLの力を使用しています。
...
#1 => 0.29s
#4 => 2.39s
#0 => 3.14s
、あなたが同じことをやってみたかったが、値は十分だろう場合は、取得することができます。
QVector<int> findBestIndices(QVector<float> ×, const int &N)
{
QVector<int> indices(times.size());
std::iota(indices.begin(), indices.end(), 0); // fill with 0,1,2,...
std::partial_sort(indices.begin(), indices.begin()+N, indices.end(),
[×](int i,int j) {return times[i]<times[j];});
return QVector<int>(indices.begin(), indices.begin()+N);
}
int main()
{
QVector<float> times = {3.14, 0.29, 3.50, 59.38, 2.39};
const int N = 3; // N best times
QVector<int> best = findBestIndices(times, N);
for(const auto &index : best) {
std::cout << '#' << index << " => " << times[index] << "s\n";
}
return 0;
}
これが印刷されます見てくださいstd::partial_sort_copy
関数を使用して、最良の要素のソートされたベクトル:
const int N = 3;
QVector<float> best(N);
QVector<float> times = {3.14, 0.29, 3.50, 59.38, 2.39};
std::partial_sort_copy(times.begin(), times.end(), best.begin(), best.end());
for(const auto &mytime : best) std::cout << mytime << '\n';
関連する問題
- 1. ベクトルのn個の最小要素のインデックスを見つける方法
- 2. 3次元numpy配列のn個の最小値のインデックスを求める
- 3. numpyの配列にN個の最小(インデックス)値が必要です
- 4. n個の配列から最小の "n"個の合計
- 5. 配列のn個の最小値を見つける
- 6. Python、最小値インデックスのインデックス
- 7. ベクトルの最小値のインデックスを返しますか?
- 8. Rでは、n個の要素のすべてのグループのベクトルから最小値を取得します
- 9. Rベクトルの最後のn個のエントリを取得するショートカット
- 10. R - ベクトルの最大n個の要素のインデックスを取得するための最も速い方法
- 11. 最大値と最小値のMySQLインデックス
- 12. (非重複移動)ベクトル内のn個の要素の平均値
- 13. インデックス内の最後のN個のアイテムのelasticsearch集計を行う方法
- 14. ベクトル内の複数の最大値のインデックスを見つける
- 15. <<コードの下ベクトルの最初のn個の値を印刷するオペレータ(全体ではなくベクトル)
- 16. リスト内の最小の番号のインデックス値を見つける?
- 17. 配列内の最小値のインデックス番号を見つける
- 18. n個の値の反復
- 19. n個の関数を最小化する
- 20. 長いベクトルの最小値と最大値を求める
- 21. ユーザ入力値が大きいベクトルの最小インデックスを見つける
- 22. ベクトルの最小値と最大値を検索し、それらのインデックスを返す関数
- 23. 境界から最小値のベクトルを見つけるベクトル化
- 24. Elasticsearch 5:最新のn個のアイテムのプロパティ値の集計
- 25. bash:ファイル内の最初の 'n'個のエントリを読み取る
- 26. Matlabの列ベクトルの数値の最小値を求める
- 27. ベクトルの突然変異をせずに、Rustのベクトルの最後のn個の要素を返します。
- 28. 検索最大/個々の列の最小値
- 29. リスト内のn個の最近傍点を見つける
- 30. リスト内のn個の数値の平均を求める
「最高」の意味を定義してください。最大値)。 – 101010
まあ、私は最小値を意味します。 –
どのバージョンのQtを使用していますか? – JVApen