C++将数组降序排列 并返回元素重复次数
时间: 2024-10-08 20:22:09 浏览: 37
在C++中,你可以使用标准库中的算法`std::sort`结合自定义比较函数来对数组进行降序排列,并统计每个元素的重复次数。首先,你需要创建一个结构体或者类来存储元素及其出现的次数,然后通过计数排序的方式来完成。
这里是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
#include <algorithm> // 包含sort和count_if
// 定义一个辅助结构体用于存储元素和其出现次数
struct ElementCount {
int value;
int count;
};
// 自定义比较函数,用于降序排列
bool compare(const ElementCount& a, const ElementCount& b) {
return a.value > b.value;
}
void count_duplicates(int arr[], int n) {
std::vector<ElementCount> countedElements(n);
// 使用sort并填充countedElements,同时计算元素的出现次数
std::iota(countedElements.begin(), countedElements.end(), 0);
std::sort(countedElements.begin(), countedElements.end(), compare);
for (size_t i = 1; i < countedElements.size(); ++i) {
if (countedElements[i].value == countedElements[i - 1].value) {
countedElements[i - 1].count += countedElements[i].count;
countedElements.erase(countedElements.begin() + i);
--i; // 跳过已合并的元素
}
}
// 输出结果
for (const auto& elem : countedElements) {
std::cout << "元素 " << elem.value << " 出现了 " << elem.count << " 次\n";
}
}
int main() {
int arr[] = {5, 9, 2, 7, 5, 9, 1, 2, 8, 5};
int n = sizeof(arr) / sizeof(arr[0]);
count_duplicates(arr, n);
return 0;
}
```
在这个例子中,我们首先使用`std::iota`填充`countedElements`,然后对它们进行排序。接着遍历排序后的元素,如果发现连续的元素值相同,就合并它们的计数。最后,输出每个元素及其对应的重复次数。
阅读全文