在两个向量之间找到相同元素的最有效方法是什么

what is the most efficient way to found the same element between two vector

本文关键字:元素 是什么 方法 有效 两个 之间 向量      更新时间:2023-10-16

如果我必须在下面这样的向量中添加字符

vector<char> sv;
sv.push_back('a');
sv.push_back('b');
sv.push_back('c');
sv.push_back('d');
sv.push_back('e');

那么我有另一个字符向量,它有sv在之前包含的部分元素

vector<char> sv2;
v2.push_back('c');
v2.push_back('d');
v2.push_back('a');
v2.push_back('f');
v2.push_back('g');

如果我想计算相同元素出现的次数,解决这个问题的最佳方法是什么?

对于vector<char>,它可以在线性时间内完成。为了简单起见,我们假设char是无符号的,或者我们使用vector<unsigned char>

int s[256] = { 0 }, s2[256] = { 0 };
for (auto a : sv)
   ++s[a];
for (auto a : sv2)
    ++s2[a];
int count = 0;
for (int i = 0; i < 256; ++i)
    count += min(s[i], s2[i]);

在一般情况下,使用排序和set_intersection,正如@Jarod42所建议的那样。