分别保留重复元素

5 c++

我有一个std::vector<std::string> textLines包含大量的城市名称.我删除了重复项:

using namespace std;

vector<string>::iterator iter;

sort(textLines.begin(), textLines.end());
iter = unique(textLines.begin(), textLines.end());
Run Code Online (Sandbox Code Playgroud)

此时,重复元素都是向量末尾的空(空)字符串,其大小与之前相同unique().

我删除它们:

textLines.resize(distance(textLines.begin(), iter));
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是有没有办法保留删除的重复项?如果重复项只是移动到最后而不是由空字符串替换,那对我来说会更好.

iter返回指出新的结束,unique()因此找到向量的新结尾没有问题.

换句话说,我想知道哪些行有重复,哪些没有.

Mat*_*jek 5

您可以非常简单地执行此操作,而无需实际更改逻辑.您可以将重复项存储在另一个容器中,该容器由传递给的传输的比较谓词捕获unique():

vector<string> duplicates;
auto iter = unique(textLines.begin(), textLines.end(), [&duplicates](auto& first, auto& second) -> bool {
    if (first == second)
    {
        duplicates.push_back(second);
        return true;
    }

    return false;
});
Run Code Online (Sandbox Code Playgroud)

实例:这里.