我的矢量中有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;
}
}
但是
error: switch quantity not an integer
switch (res) {
我该如何解决这个问题?使用循环,还是有其他解决方案?
答案 0 :(得分:5)
您可以使用std::map<int, int>
或std::unordered_map<int, int>
:
std::map<int, int> counter;
for (auto i: res)
counter[i]++;
要查看每个值的数量:
for (auto p: counter)
std::cout << "Value: " << p.first
<< ", occurrences: " << p.second << std::endl;
请注意,这是一个非常通用的解决方案,适用于任意数量的int
值,但有一些开销。如果您知道有一组固定的可接受值,则可以使用数组和简单,完美的散列函数。如果这些数字是连续的,那么你的完美哈希函数&#34;只是减去一个偏移量(在你的情况下为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)]++;
答案 1 :(得分:2)
最简单的方法是x
是您想要计算的数字,
int quantity = std::count(res.begin(), res.end(), x);
我写的方式也适用于其他容器类型,而不仅仅是std::vector
。
C ++标准库充满了这些强大的功能;我建议你研究一下。
答案 2 :(得分:2)
古老,高效,轻便,遗忘的方式:
team name
team photo
team member 1 name
team member 1 photo
team member 1 qualification/skills
team member 2 name
team member 2 photo
team member 2 qualification/skills
etc...