有很多删除重复值的教程,我都检查过了
喜欢
{1,2,3,4,1,2,3,4,5} -> {1,2,3,4,5}
通过使用 sort()、unique() 函数。
但是如果我想删除“所有重复的”值
喜欢
{1,2,3,4,1,2,3,4,5} -> {5}
如何实现?
我已手动将原始 vector 分成两部分,并逐个删除第一部分中的重复元素。
这是有道理的,但是如果原始 vector 变得很大,那么我就无法手动拆分原始 vector 。
最佳答案
这是一个使用 range-v3 的解决方案:
namespace rv = ranges::views;
ranges::sort(v);
auto res = v
| rv::group_by(std::equal_to{})
| rv::filter([](auto r) { return ranges::size(r) == 1; })
| rv::join
| ranges::to<std::vector<int>>;
这是一个 demo .
这是一个使用 STL 的 O(n log(n))
就地解决方案:
auto begin = v.begin(), end = v.end();
std::sort(begin, end);
while(begin != end)
if (auto f = std::find_if(begin + 1, end,
[begin](int i) { return i != *begin; });
begin + 1 != f) // if duplicate elements found
end = std::move(f, end, begin); // move them to the end
else ++begin;
v.erase(end, v.end());
这是一个 demo .
关于c++ - 如何删除 'all duplicated ' 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62649664/