#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

int main() {
	vector<int> v1,v2, sim; 
	stringstream sfs1{"1 2 3 4 5"};
	stringstream sfs2{"8 4 5 7 1"};
	
	// read 2 files
	copy(istream_iterator<int>(sfs1), istream_iterator<int>(), back_inserter(v1));
	copy(istream_iterator<int>(sfs2), istream_iterator<int>(), back_inserter(v2));
	
	// make the sequence sorted for set_intersection to work 
	sort(v1.begin(), v1.end()); 
	sort(v2.begin(), v2.end()); 
    set_intersection(v1.cbegin(), v1.cend(), v2.cbegin(), v2.cend(), back_inserter(sim));
    cout << "Similar elements: " << sim.size()<<endl; 
    cout << "Similarity coefficient: "<< (double)sim.size()/max(v1.size(), v2.size())*100 <<"%"<<endl;  
   
    cout << "Explanations: "<<endl;
	cout<<"  File1:"; copy(v1.cbegin(), v1.cend(), ostream_iterator<int>(cout," ")); cout<<endl; 
	cout<<"  File2:"; copy(v2.cbegin(), v2.cend(), ostream_iterator<int>(cout," ")); cout<<endl; 
	cout<<"  In common:"; copy(sim.cbegin(), sim.cend(), ostream_iterator<int>(cout," ")); cout<<endl; 
	
	
	return 0;
}