0
我在此格式的文件:make_pair矢量<矢量<struct>>
id1 its_vlaue1 id2 its_vlaue2 id3 its_vlaue3
id4 its_vlaue4 id5 its_vlaue5
id6 its_vlaue6 id7 its_vlaue7 id8 its_vlaue8
其中id是整数,并且its_vlaue是浮动,例如:
100 0.1 2 0.6 9 0.03
4 0.6 3 0.1
.
.
until 300k line
予读取此文件为:
struct dataf
{
int id;
float value;
};
vector<vector<dataf>> mydata;
dataf DF;
void main()
{
ifstream inFile;
inFile.open("MyData.txt");
if (inFile.fail())
cout << "\n The file has been not found, please try again \n ";
else
{
string line;
cout << "\n File found!\n Reading the file data! \n\n";
// Read the file until EOF
while (!inFile.eof())
{
getline(inFile, line);
std::stringstream Sline(line);
while (Sline >> DF.id>> DF.value)
{
vector<dataf> temp;
temp.push_back(DF);
mydata.push_back(temp);
}
}
}
inFile.close();
PairS();
cout << " \nPress any key to continue\n";
cin.ignore();
cin.get();
return;
}
对()函数make_pair使得:
(id1,id2), (id1,id3), (id2,id3)
(id4,id5)
(id6,id7), (id6,id8), (id7,id8)
但是,我无法弄清楚
void PairS()
{
vector<dataf>::iterator i;
vector<dataf>::iterator j;
std::map<std::pair< int, int>, float> Pairf;
for (int k = 0; k != ((mydata.size()) - 1); ++k)
{
for (i = mydata[k].begin(); i != mydata[k].end(); ++i)
{
int a = (*i).Item;
for (j = mydata[k + 1].begin(); j != mydata[k+1].end(); ++j)
{
int b =(*j).Item;
auto itt = Pairf.find(std::make_pair(b, a));
++Pairf[(itt != Pairf.end()) ? std::make_pair(b, a) : std::make_pair(a, b)];
}
}
}
cout << "\n\n The TotalSupp's Count for every Pair of Items :\n\n";
for (const auto& p : Pairf)
{
std::cout << "(" << p.first.first << " " << p.first.second << ") = "
<< p.second << '\n';
}
cout << "\n";
}
也,我不知道如果我选择存储在矢量我的数据的适当方法。
非常感谢。第一部分工作,但我有问题:当你从文件读取数据时,代表所有数据?和()意味着直到文件结束? – NHA
第二部分,给了我的错误,所以我没有测试它,即使我插入(#包括 的#include 的#include 的#include ) –
NHA
的第二部分,我想make_pair与(id1,id2),(id1,id3),(id2,id3)中的所有项目并计算它们的频率,并对第二行进行相同处理:(id4 ,id5),如果一个线对存在,我不会创建对,而是更新其频率。我想我会立即尝试从文件中做到这一点,而不是先将数据放入向量中 – NHA