【发布时间】:2019-05-21 12:12:12
【问题描述】:
假设我有一组向量,其中 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.
我看到很多关于如何删除重复项的问题,但我希望只保留重复项。
我问了一个类似的问题,但忽略了不可排序的 Pair 类型,这改变了问题。
是否有现有的高效 STL 算法或构造可以为我完成这项工作,还是我需要自己编写?
【问题讨论】:
-
这个问题有一些其他问题没有涉及到的元素,例如 Pair 不是可排序的类型。
-
这是一个不同的问题。您可以使用可排序的
std::pair,或为您的班级提供operator <。阅读How can I use std::maps with user-defined types as key?。它处理std::map,但它解决了完全相同的问题。 -
@Steve 可以使用一个集合来代替。
-
好的,所以 Pairs 是不可排序的,但是我们可以为它们实现一个哈希函数吗?