Я написал функцию, которая определяет, являются ли два слова анаграммами. слово A - это анаграмма слова B, если вы можете построить слово B из A, просто переставив буквы, например:
lead is anagram of deal
Это моя функция:
bool is_anagram(std::string const & s1, std::string const & s2)
{
auto check = [](std::string const & x)
{
std::map<char, unsigned> counter;
for(auto const & c : x)
{
auto it = counter.find(c);
if(it == counter.end())
counter[c] = 1;
else
++counter[c];
}
return counter;
};
return check(s1) == check(s2);
}
Это отлично работает, но по мере увеличения количества слов (и эта функция используется несколько миллионов раз в моей заявке), он очень скоро стал основным узкое место моего приложения.
Есть ли у кого-нибудь представление о том, как ускорить эту функцию?