This C++ coding style guideline is NOT about readability. Not if you mean making people THINK they like reading the code. This is about true readability, accuracy, debug-ability. The overload based version reads easier ... you don't think about the function as 2 functions, and you don't have to think about the type. However, these methods are actually 2 different lookups, semantically, so they should have 2 different names - If I converted the int 5 to the string "5" and called the method, it would NOT return the animation with the index 5, but instead of return a null pointer because there is no animation with the NAME "5". As C++ has evolved with all sorts of anonymous and auto typing, this kind of thing would be almost 100% invisible to a reader and even tough for a debugger.
There is nothing wrong with overloads like in the math library:
float sqrt(float)
double sqrt(double)
because they are semantically identical. Never mix (basic) TYPE selection with semantic selection.
There are reasons to violate every "rule". But in general only violate rules like this in methods are only FOR violating this rule. in other words a method with overloads that change the behavior based on the type of the input, should ONLY be a facade for selecting different behaviors based on type