实现找到一组数中中出现次数最多的元素,如果有多个元素的出现次数相同,按数值从大到小的次序依次输出这些元素C++
时间: 2024-11-17 17:30:52 浏览: 10
要在C++中实现这个功能,你可以采用哈希表(unordered_map)来统计每个元素的出现次数,然后遍历一次数据结构,找到出现次数最多的元素并存储在一个优先队列(priority_queue)中,保持元素值由大到小的顺序。以下是简单的步骤和示例代码:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
// 定义一个辅助结构,用于存放元素及其计数
struct Compare {
bool operator()(const std::pair<int, int>& a, const std::pair<int, int>& b) {
if (a.second == b.second)
return a.first > b.first;
else
return a.second > b.second;
}
};
int main() {
std::vector<int> nums = {4, 2, 5, 2, 8, 9, 5, 6, 5}; // 输入的一组数字
std::unordered_map<int, int> countMap;
for (auto& num : nums) {
countMap[num]++;
}
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, Compare> maxCountQueue(countMap.begin(), countMap.end());
if (!maxCountQueue.empty()) {
while (!maxCountQueue.empty()) {
std::cout << "出现次数最多且最大的元素: " << maxCountQueue.top().first << " (出现次数: " << maxCountQueue.top().second << ")" << '\n';
maxCountQueue.pop();
}
} else {
std::cout << "输入的数组中没有任何元素!" << '\n';
}
return 0;
}
```
在这个代码里,我们首先通过`unordered_map`计算每个元素的出现次数,然后将这些数据插入到`priority_queue`中,利用自定义比较函数保证元素按照值的降序排列。最后,我们逐个取出并打印出元素。
阅读全文