set_symmetric_difference()
, bu т перед этим диапазонов источника должны быть заказаны:
vector<int> v1;
vector<int> v2;
// ... Populate v1 and v2
// For the set_symmetric_difference algorithm to work,
// the source ranges must be ordered!
vector<int> sortedV1(v1);
vector<int> sortedV2(v2);
sort(sortedV1.begin(),sortedV1.end());
sort(sortedV2.begin(),sortedV2.end());
// Now that we have sorted ranges (i.e., containers), find the differences
vector<int> vDifferences;
set_symmetric_difference(
sortedV1.begin(), sortedV1.end(),
sortedV2.begin(), sortedV2.end(),
back_inserter(vDifferences));
После этого, все различные элементы этих двух векторов (т.е. либо в v1
, либо v2
, но не оба) будут храниться в vector<int> vDifferences
. Для вашего примера это будет {0, 2, 6}
.
[...] Вычисляет симметричную разность двух отсортированных диапазонов: элементы, которые находятся в любом из диапазонов, но не в обоих из них, копируются в диапазон, начинающийся с d_first. Полученный диапазон также сортируется. [...]
Если вам просто нужно недостающие элементы в v1
, вы можете дополнительно просканировать vDifferences
против sortedV1
, чтобы найти их.
Отъезд this discussion для получения дополнительной информации.
Сортировка и сравнение. – herohuyongtao
Вы пробовали set_difference? http://www.cplusplus.com/reference/algorithm/set_difference/ – Trenin
Или просто сравните с векторами с '=='. – Trenin