c++ - 如何在 C++ 中获取 std:vectors 的频率?
问题描述
我有 5 个向量。我想检查这些向量存在多少次。我使用以下代码来比较 2 个向量是否相等,但现在我有超过 2 个向量。我想将所有这 5 个向量一起比较并计算每个向量存在的次数。
我该怎么做?
输出应该是:
(0,0,1,2,3,0,0,0) = 2 time(s)
(0,0,1,2,3,4,0,0) = 1 time(s)
(0,0,2,4,3,0,0,0) = 1 time(s)
(0,0,6,2,3,5,6,0) = 1 time(s)
这是我的代码:
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
void checkVec(vector<int> v){
vector<int> v0;
if(v0 == v){
cout << "Equal\n";
}
else{
cout << "Not Equal\n";
}
}
int main(){
vector<int> v1={0,0,1,2,3,0,0,0};
vector<int> v2={0,0,1,2,3,4,0,0};
vector<int> v3={0,0,2,4,3,0,0,0};
vector<int> v4={0,0,1,2,3,0,0,0};
vector<int> v5={0,0,6,2,3,5,6,0};
checkVec(v1);
return 0;
}
解决方案
您可以使用std::map
计算每个向量的出现次数:
#include <map>
#include <vector>
#include <iostream>
using vec = std::vector<int>;
int main(){
vec v1={0,0,1,2,3,0,0,0};
vec v2={0,0,1,2,3,4,0,0};
vec v3={0,0,2,4,3,0,0,0};
vec v4={0,0,1,2,3,0,0,0};
vec v5={0,0,6,2,3,5,6,0};
std::map<vec,std::size_t> counter;
// Initializer list creates copies by default
// But you should not create vX variables anyway.
for(const auto& v: {v1,v2,v3,v4,v5}){
++counter[v];
}
std::cout<<"V1 is present " <<counter[v1]<<" times.\n";
return 0;
}
V1 is present 2 times.
推荐阅读
- python - 按年份对数据框进行分组以绘制较小的图表
- python - Cloud Composer / Airflow:只能在 Operator 之间设置关系;收到 PythonOperator
- regex - 如何使用 grep 查找 3 位数字且仅 3 位数字?
- docker - 使 NFS 共享在 Openstack 上运行的 Kubernetes pod 中可见
- php - Laravel Horizon 队列处理,但未收到预期结果
- python - Windows 10 - python pip 不工作(添加了环境变量)
- html - 有没有办法只拆分一些标签垂直分成两列?
- karate - $符号在空手道框架中有什么用?
- python - 张量流模型到 Numpy
- google-apps-script - 我想使用标题值(列名)而不是列号对电子表格进行排序