Мне нужно найти индексы k наибольших элементов несортированного длины n, array/vector в С++, с k < п. Я видел, как использовать nth_element() для поиска k-й статистики, но я не уверен, что использование этого является правильным выбором для моей проблемы, поскольку мне кажется, что мне нужно будет сделать k вызовов nth_statistic, что, я думаю у него будет сложность O (kn), которая может быть такой же хорошей, как она может быть получена? Или есть способ сделать это только в O (n)?
Реализация без nth_element() кажется, что мне придется перебирать весь массив один раз, заполняя список индексов самых больших элементов на каждом шаге.
Есть ли что-нибудь в стандартной библиотеке С++, которая делает это одним лайнером или каким-либо умным способом реализовать это самостоятельно всего за пару строк? В моем конкретном случае k = 3 и n = 6, поэтому эффективность не вызывает большого беспокойства, но было бы неплохо найти чистый и эффективный способ сделать это для произвольных k и n.
Похоже, Отметить верхние N элементов несортированного массива - это, вероятно, самая близкая публикация, которую я могу найти на SO, сообщения, которые есть в Python и PHP.