我的矢量中有1484个数值我想计算每个我有多少.数字从1到8.我试过这样的
#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
using namespace std;
int main(){
vector<int> res;
int sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8;
std::ifstream inputFile1("/home/milenko/cl.dat");
if (inputFile1) {
int value;
while ( inputFile1 >> value ) {
res.push_back(value);
}
}
switch (res) {
case 1:
sum1=sum1+1
break;
case 2:
sum2=sum2+1
break;
case 3:
sum3=sum3+1
break;
case 4:
sum4=sum4+1
break;
case 5:
sum5=sum5+1
break;
case 6:
sum6=sum6+1
break;
case 7:
sum7=sum7+1
break;
case 8:
sum8=sum8+1
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但
error: switch quantity not an integer
switch (res) {
Run Code Online (Sandbox Code Playgroud)
我应该如何解决这个问题?使用循环,还是有其他解决方案?
您可以使用std::map<int, int>或轻松地执行此操作std::unordered_map<int, int>:
std::map<int, int> counter;
for (auto i: res)
counter[i]++;
Run Code Online (Sandbox Code Playgroud)
要查看每个值中有多少个:
for (auto p: counter)
std::cout << "Value: " << p.first
<< ", occurrences: " << p.second << std::endl;
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个非常通用的解决方案,适用于任意数量的int值,但有一些开销.如果您知道有一组固定的可接受值,则可以使用数组和简单,完美的散列函数.如果这些数字是连续的,那么你的"完美散列函数"只是减去一个偏移(1在你的情况下),如@ yvesdaoust的回答所示.
std::array<int, 8> counter{}; // Only 8 values, in range [1, 8]
inline int perf_hash(int n) { return n - 1; }
// WARNING: This will invoke undefined behaviour for i not in range [1,8]
for (auto i: res)
counter[perf_hash(i)]++;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |