c++ - 从 vector 集中修剪非公共(public)元素

标签 c++ algorithm stl

假设我有一组 vector ,其中 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} };

我想创建一个新 vector ,这样只有所有输入 vector 共有的元素才会被输入到新 vector 中,如下所示:

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

我看到很多问题询问如何删除重复项,但我希望只保留重复项。

我问了一个类似的问题,但忽略了提到不可排序的 Pair 类型,这改变了问题。

是否有现成的高效 STL 算法或构造可以为我执行此操作,还是我需要自己编写?

最佳答案

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

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)的时间和空间。

关于c++ - 从 vector 集中修剪非公共(public)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56238031/

相关文章:

c++ - 在 C++ 函数中接收双端队列或 vector 作为公共(public)参数

c++ - 是否有一个 bitset 类在实例化时调整大小,但避免了 boost::dynamic_bitset<> 的额外分配调用?

c++ - C++判断分区是否为空

c++ - gcc thunk hack 用于多重继承

C++ 管理器对象和虚函数

php - 自动添加指向关键字字符串的链接

algorithm - 增加折扣的渐进非线性算法

c++ - 需要帮助在类中创建对象,并为成员函数赋值

C++ 整数溢出和提升

C++ 高效计算运行中位数