从向量集中修剪非公共元素

时间:2019-05-21 12:12:13

标签: c++ algorithm stl

假设我有一组向量,其中Pair定义如下:

struct Pair
{
   int A;
   int B;
}

std::vector<Pair> a = { {1,2}, {4,8}, {5,1}, {10,3} };
std::vector<Pair> b = { {1,2}, {4,9}, {5,1}, {10,3} };
std::vector<Pair> c = { {1,3}, {4,10}, {5,1}, {10,4} };

我想创建一个新向量,以如下方式将所有输入向量共有的元素输入到新向量中,如下所示:

std::vector<Pair> abc = { {5,1} }; //  {5,1} is only common value.

我已经看到许多问题,询问如何删除重复项,但我希望仅保留重复项。

我问了类似的问题,但忽略了不可排序的结对类型,这改变了问题。

是否存在现有的高效STL算法或结构可以为我做到这一点,还是我需要编写自己的算法?

1 个答案:

答案 0 :(得分:1)

使用哈希表来跟踪您每次看到的次数:

std::vector<Pair> abc;
std::unordered_map<Pair, int> count;

for (const auto& vec : {a, b, c})
    for (const Pair& pair : vec)
        if (++count[pair] == 3)
            abc.push_back(pair);

现在是O(n)的时间和空间。