容器中数据由大到小排列 ,取前N位,计算平均值 c++
时间: 2024-10-10 11:14:35 浏览: 8
在C++中,如果你想对容器(如`std::vector`或`std::priority_queue`,后者默认按照优先级从大到小排序)中的数据进行大到小排序并取前N个元素计算平均值,你可以这样做:
1. 首先,你需要包含必要的头文件,并定义一个函数来计算平均值:
```cpp
#include <iostream>
#include <vector>
#include <queue>
double calculate_average(const std::vector<int>& data, size_t n) {
if (n > data.size()) {
std::cerr << "Error: N is larger than the container size.\n";
return 0;
}
// 使用优先队列存储最大值
std::priority_queue<int> max_heap(data.begin(), data.end());
for (size_t i = n; i < data.size(); ++i) {
max_heap.pop();
max_heap.push(data[i]);
}
double sum = 0;
for (int val : max_heap) {
sum += val;
}
return sum / n;
}
```
在这个例子中,我们首先检查`n`是否大于容器大小,如果超过,则返回错误信息。然后使用`priority_queue`来维护前N大的数,同时移除多余的元素。
2. 然后你可以通过调用这个函数并传入你的容器和想要取的前N个数来获取平均值:
```cpp
int main() {
std::vector<int> data = {5, 10, 15, 20, 25, 30};
size_t n = 4;
double average = calculate_average(data, n);
std::cout << "The average of the largest " << n << " numbers is: " << average << "\n";
return 0;
}
```