#include <algorithm>
#include <iostream>
#include <clocale>
#include <string>
using namespace std;
class Counter
{
public:
size_t cnt = 0;
static int v;
Counter& operator++() { ++cnt; return *this; }
Counter operator++(int) { Counter r = *this; ++cnt; return r; }
int& operator*() const { return v; }
};
int Counter::v = 0;
int main()
{
setlocale(LC_CTYPE, "rus");
string a = "1234444";
string b = "9321999";
std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());
std::string::iterator aEnd = std::unique(a.begin(), a.end());
std::string::iterator bEnd = std::unique(b.begin(), b.end());
Counter cnt = std::set_intersection(
a.begin(), aEnd, b.begin(), bEnd, Counter());
cout << cnt.cnt << endl;
return 0;
}
std::numeric_limits<size_t>::max()
и означает «не найдено» (если на выходе) или «до конца строки» (если на входе).