Самое простое и понятное два цикла вложенных друг в друга. Т.е. Берёшь нулевой элемент первого массива, сравниваешь с каждым элементом второго. Потом первый и т.д
На c++ можно извратиться и записать это в одну конструкцию
Побаловался от нечего делать
inline int count_cpp()
{
return count_if(begin(a), end(a), [](int c) {static set<int> s(begin(b), end(b)); return s.find(c) != s.end();});
}
inline int count_c()
{
int c = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if(a[i] == b[j]) {
++ c;
break;
}
}
}
return c;
}
inline int count_map()
{
int c = 0;
map<int, bool> bm;
for (auto i : b) {
bm[i] = true;
}
for (auto i : a) {
if (bm.find(i) != bm.end()) {
++ c;
}
}
return c;
}
Время выполнения для 10000 случайных элементов в диапазоне 0-10000
[cpp method] Time: 4006 us.
[pure c method] Time: 71019 us.
[map method] Time: 5178 us.