我发现自己经常遇到这个问题:给定一个序列,找到 k 最小的元素。这个问题并不难,但我正在寻找一种既安全又安全的“惯用”方式(很少有地方适合错误)并且可以很好地传达意图。所以最终要做的是对序列进行排序,然后取第一个 k 元素:
std::sort(container.begin(),container.end());
std::vector<T> k_smallest(container.begin(),container.begin() + k);
这在我看来既安全又容易理解,但这里的复杂性是 nlogn + k,而不仅仅是 n。你们是怎么做到的,有没有一种惯用的方式(可能使用一些晦涩的功能)可以提供最佳的复杂性,而无需重新实现轮子