Есть ли элегантный способ вычесть std::vector
s, которые содержат дублированные элементы?Вычесть векторы, содержащие дублированные элементы
Пример:
v1 = { 3, 1, 2, 1, 2, 2 }
v2 = { 2, 4, 3, 3, 3 }
result1 = ??(v1, v2)
result2 = ??(v2, v1)
, и я хочу, чтобы результат:
result1 = { 1, 1 }
result2 = { 4 }
Моя текущая (и очень медленно) раствор:
1) sort v1 and v2
2) use std::unique_copy to v1_uniq, v2_uniq
3) intersect the new vectors with std::set_intersection
4) iterate over v1 and v2 and remove all elements, that are in the intersection 3)
Моя другая идея заключается в том:
1) sort v1 and v2
2) iterate over v1 and v2 and remove duplicates in parallel
Но это своего рода подвержены ошибкам не выглядеть элегантно мне.
Любые другие идеи?
Вы всегда хотите выполнить операцию двумя способами? (т. е. вам нужны как «результат1», так и «результат2»?) –
@ DavidRodríguez-dribeas - да, я делаю –