int vectorIntersectionBenchmark() { const int nBags = 1000; const int maxBagLength = 10; vector> bags; ifstream input("10000ran.dat"); // http://www.agner.org/random/10000ran.zip int similarity = 0; bags.reserve(nBags); for (int iBag = 0; iBag < nBags; ++iBag) { vector bag; for (int j = 0; j < maxBagLength; ++j) { string number; getline(input, number, ','); bag.push_back(round(atof(number.c_str())*maxBagLength)); } sort (bag.begin(), bag.end()); bag.erase (unique(bag.begin(), bag.end()), bag.end()); bags.emplace_back(bag); } for (int i = 0; i < bags.size(); ++i) for (int j = i+1; j < bags.size(); ++j) { vector intersec; set_intersection(bags[i].begin(), bags[i].end(), bags[j].begin(), bags[j].end(), inserter(intersec, intersec.begin())); similarity += intersec.size(); } return similarity; }