У меня есть 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 индексов (не только значения), как вы хотите.
Он очень похож на ответ Игоря, но он дает вам вектор результата с точно N лучшими индексами.
Этот код очень прост и использует мощность STL, так же, как вы просили. Посмотрите:
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;
}
Это будет печатать:
#1 => 0.29s
#4 => 2.39s
#0 => 3.14s
Тем не менее, если вы когда-нибудь хотели сделать то же самое, но значения будет достаточно ...
Вы можете получить отсортированный вектор ваших лучших элементов с помощью 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. Найдите n наименьших значений из данных?
- 4. Perl PDL - получение наименьших значений 80% в векторе
- 5. Как найти N наименьших значений в 2-мерном массиве (C++)
- 6. Как индексы печати из 10 наименьших значений в массиве
- 7. Найти n наибольших значений в векторе
- 8. Как я могу найти индексы двух наименьших элементов в векторе без сортировки?
- 9. Получите индексы N наивысших значений в ndarray
- 10. Вычислить стандартное отклонение наименьших значений N в столбце
- 11. Формула для получения значения (n-6) наименьших значений из n несортированных значений в строке
- 12. JPQL: выберите набор из n наименьших/самых высоких значений
- 13. Относительная позиция в векторе n-минимальных значений в Matlab
- 14. Присвоение значений в одном векторе индексам в другом векторе?
- 15. Определение минимальных значений в векторе в R
- 16. Найти индексы в векторе эффективно в MATLAB
- 17. Сортировка наименьших элементов n/logn в массиве
- 18. Инициализация значений в векторе
- 19. Найти индексы наименьших ближайших соседей между двумя списками в python
- 20. Найти индексы уникальных в векторе matlab?
- 21. R: Получение индексы элементов в отсортированном векторе
- 22. Найти индексы с несколькими максимумами в векторе
- 23. Найти индексы интересующих чисел в векторе
- 24. Найти два наименьших входных значений
- 25. Как удалить дубликат наименьших значений?
- 26. Вернуть первые 3 наименьших значения и их индексы из матрицы
- 27. Swift: получить индексы наименьших элементов в двумерном массиве
- 28. Отображение атрибутов значений в векторе
- 29. определить изменение значений в векторе
- 30. Найти n минимальных значений в массиве
Пожалуйста, определите значение «наилучшего» (e. g., максимальные значения). – 101010
Ну, я имею в виду минимальные значения. –
Какую версию Qt вы используете? – JVApen