C++ 获取 vector 最大的 3 个数字

假设现在有一个数组存储了成绩信息,要获得前三名

#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int> scores{10, 30, 90, 30, 100, 20, 10, 0, 30, 40, 40, 70, 70};

下面这种方法可以将前3名成绩复制到结果里,同时考虑到 scores 长度小于 3 的情况。

std::vector<int> result(scores.size() < 3 ? scores.size() : 3);
std::partial_sort_copy(scores.begin(), scores.end(), result.begin(), result.end(), std::greater<int>());

std::partial_sort_copy - cppreference.com
std::greater - cppreference.com

如果不介意对 scores 进行修改的话,可以这样做,std::sort 默认是升序排列,通过设定第三个参数指定排序依据。

std::sort(scores.begin(), scores.end(), [](int a, int b)
{ return a > b; }); // sort inversly
std::sort(scores.begin(), scores.end(), std::greater<int>()); // sort inversly (better approach)
int length = scores.size() > 3 ? 3 : scores.size();
for (auto c : std::vector<int>(scores.begin(), scores.begin() + length))
{
std::cout << c << std::endl;
}

如果是只需要获取最大值:

int result = *std::max_element(scores.begin(), scores.end());
posted @   BuckyI  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示