我目前正在编写一个代码来交叉两个文本文件集。我是C ++的新手,所以编码很糟糕。请告诉我这段代码中我缺少什么或输入错误。谢谢你的帮助。
set<string> file1;
set<string> file2;
set<string> ofile;
string data1[] = { "X.txt"};
string data2[]={"Y.txt"};
file1.insert(data1,data1);
file2.insert(data2, data2);
cout<< "file1 is" << file1<<endl;
set_intersection(file1.begin(),file1.end(),file2.begin(),file2.end(),
inserter(file1, file1.begin()));
cout<<"file1 * file2 is" << ofile<< endl;
答案 0 :(得分:2)
假设您想从文件x.txt
和y.txt
获取整数数据,您可以执行以下操作:
typedef int T;
std::ifstream in1("x.txt");
std::ifstream in2("y.txt");
std::set<T> set1{ std::istream_iterator<T>(in1),
std::istream_iterator<T>() };
std::set<T> set2{ std::istream_iterator<T>(in2),
std::istream_iterator<T>() };
std::set_intersection(set1.begin(), set1.end(),
set2.begin(), set2.end(),
std::ostream_iterator<T>(std::cout, "\n"));
如果文件的内容不是整数,您可以更改T
的类型以适应(例如,如果您有一组单词,则可能需要使用std::string
代替int
)。
现在看来,这只是将结果写入标准输出。您可能希望更改它以将输出放在其他集合中。
目前,这也将初始输入数据放入std::set
s。尽管名称为set_intersection
,但数据并非真正需要std::set
。它实际上只需要按排序顺序存储。例如,您可以将数据放入std::vector
s,然后对它们进行排序,并(如有必要)使用std::unique
来确保每个向量中的唯一元素。我提出这个问题主要是因为它通常运行得更快并且使用(基本上)更少的内存。