unordered_map<int, int> counts;
时间: 2024-02-05 08:56:01 浏览: 99
这是一个 C++ 中的 unordered_map 容器,用来存储键值对,其中键为 int 类型,值为 int 类型。这个容器可以用来计数某些元素的出现次数。比如,如果你有一个整数数组,想统计每个整数出现的次数,可以使用这个容器来实现。可以通过 counts[key]++ 的方式来增加某个键的值,如果这个键不存在,那么会自动插入一个新的键值对,值为 0。
相关问题
unordered_map<int, int> counts; int majority = 0, cnt = 0; for (int num: nums) { //遍历nums中的值 ++counts[num]; if (counts[num] > cnt) { majority = num; cnt = counts[num]; } } return majority;
这段代码是用来找出一个数组中出现次数最多的元素,即所谓的“多数元素”。它使用了unordered_map来记录每个元素出现的次数,并使用两个变量majority和cnt来记录当前出现次数最多的元素和它的出现次数。在遍历数组中的每个元素时,如果它的出现次数大于cnt,则将majority更新为该元素,cnt更新为它的出现次数。最后返回majority即可。
给我一段简洁的质因数分解的c++代码,分解得到的质因子存入vector<int>p, 质因子重复次数存入vector<int>pc
如果你需要同时存储每个质因子及其出现的次数,你可以稍微修改一下之前的代码,创建两个向量分别存储质因子和它们的计数。这里是一个示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
// 判断是否为质数
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
// 质因数分解并统计频率
void primeFactorize(std::vector<int>& p, std::vector<int>& pc, int n) {
p.clear();
pc.clear();
while (n > 1) {
int factor = 2;
while (n % factor != 0 && !isPrime(factor)) {
++factor;
}
// 添加质因子到p向量,并更新pc向量的计数
if (find(p.begin(), p.end(), factor) == p.end()) {
p.push_back(factor);
pc.push_back(1);
} else {
auto it = find(pc.begin(), pc.end(), factor);
(*it)++;
}
n /= factor;
}
}
int main() {
int number;
std::cout << "Enter a number to factorize: ";
std::cin >> number;
std::vector<int> p;
std::vector<int> pc;
primeFactorize(p, pc, number);
std::cout << "Prime factors and their counts are: ";
for (size_t i = 0; i < p.size(); ++i) {
std::cout << p[i] << "(" << pc[i] << ") ";
}
return 0;
}
```
在这个版本的代码里,我们使用`unordered_map`来跟踪每个质因子及其出现的次数。如果质因子已经在`p`向量中,则在对应的`pc`位置增加计数。
阅读全文