c++ - 从 3 个 vector 中删除重复项

标签 c++ string vector

我在 C++ 中遇到了问题。假设我有 3 个 vector (不要介意定义错误,只是一个例子)

a = {"a", "b"}, b = {"b", "c"}, c = {"b", "c"}

我怎样才能最快速有效地从中删除所有重复项,所以结果如下。一个 vector 中没有重复项,并且 vector 未按字母顺序排序。

a = {"a"}, b = {}, c = {}

编辑: 我试过这个:

for (int i = 0; i < a.size(); i++)
    {
        int i1 = findIndex(b, a[i]);
        int i2 = findIndex(c, a[i]);
        if (i1 != -1)
        {
            a.erase(a.begin() + i);
            b.erase(b.begin() + i1);
        }

        if (i2 != -1)
        {
            a.erase(a.begin() + i);
            c.erase(b.begin() + i2);
        }
}

findIndex 在哪里:

int findIndex(vector<string> vec, string s)
{
    for (int i = 0; i < vec.size(); i++)
    {
        if (vec[i] == s)
        {
            return i;
        }
    }

    return -1;
}

最佳答案

#include <unordered_map>
#include <vector>
#include <algorithm>
#include <string>

void RemoveDuplicates(std::vector<std::vector<std::string>> &vectors)
{
    std::unordered_map<std::string, int> count;

    for (auto& vec : vectors)
    {
        for (auto str : vec)
        {
            count[str]++;
        }
    }


    for (auto& vec : vectors)
    {
        auto it = std::remove_if(vec.begin(), vec.end(),
                                 [&count](const std::string& str) { return count[str] > 1; });
        vec.erase(it, vec.end());
    }
}

int main()
{
    std::vector<std::vector<std::string>> myvectors = { {"a", "b"}, { "b", "c" }, { "b", "c" } };
    RemoveDuplicates(myvectors);

    return 0;
}

关于c++ - 从 3 个 vector 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58712613/

相关文章:

c - printf 在 for 循环中打印更多行

c++ - 未定义、未指定和实现定义的行为

C++ vector push_back 不工作

c++ - vtkImageData 使用 VTK 的空白单元格或空白点

python - 仅当字符串不紧跟在另一个特定字符之后时才在特定字符上拆分字符串

vector - 什么是词向量维数

c++ - [over.unary]/2中注释中提到的隐藏的编译示例

java - 为什么字符串在许多编程语言中都是不可变的?

java - 如何将字符串数字格式化为逗号和四舍五入?

c++ - vector 和原始 C 风格数组之间的性能比较