我有一个csv文件,如下所示:
ID L1 L2 L3 L4 X Y Z
1 3 3 1 2 f f x
1 3 3 3 2 g f f
2 3 4 4 3 o p q
我想集中注意保持(id,Li)的位置,其中i = 1、2、3、4作为键,出现的频率作为值,我想使用显示的c ++映射创建一个表,
<1, 3> appeared 5 (i.e. where ever 1 was there 3 appeared in L1 and/or L2 L3 L4)
<1, 1> appeared 1
<1, 2> appeared 2
<2, 3> appeared 2
<2, 4> appeared 2
如果有一个新条目,则将其添加,并对旧条目进行计数。
我是C ++的新手。我能够使用dict
在python中实现此功能。在C ++中使用std::map
似乎很简单,但是我不确定如何将其应用于这种情况!
答案 0 :(得分:1)
如果您希望将2个整数存储为键,将1个存储为频率,这就是您的操作方式
std::map<std::pair<int, int>, int>
在上一行:
pair< <int,int>, int>
可以理解为对<键,值>。
在搜索特定键时,您将需要一对int。 例如:如果您已存储<1,2> = <3> 您将必须使用键= <1,2>
进行搜索编辑:
#include <iostream>
#include <map>
using namespace std;
int main()
{
std::map<std::pair<int, int>, int> freq_data;
freq_data[make_pair(1,3)] = 5;
freq_data[make_pair(1,1)] = 1;
freq_data[make_pair(1,2)] = 2;
cout<<freq_data.at(make_pair(1,3))<<endl;
return 0;
}