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

时间:2015-12-10 22:22:46

标签: c++

说如果我必须像下面的字符向量

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');

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

1 个答案:

答案 0 :(得分:0)

对于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