It does seem like a weird choice, since anyone faced with this problem fewer than a billion times will surely choose shell tools. In python it's pretty short, and I don't even know python.
from collections import defaultdict
...: d=defaultdict(int)
...: for fn in glob.iglob("**/*.txt"):
...: with open(fn, 'r') as f:
...: for line in f:
...: for word in line.split():
...: d[word] = d[word] + 1
...: [(k, v) for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True)][:10]
That said, the C++ version in the article could be tightened up a bit. What's happening on line 34, for instance?