Get K most frequent tokens from a token stream
I feel my code is not concise enough


The feeling is mutual.

I feel that this can be expressed much more succinctly.


  I am not experienced using some new features in C++11.


You seem to be using range based for so not bad in that regards.

But. You do "probably" have a memory leak.

hash_table[token] = TokenInfo::TokenInfoPtr(new TokenInfo(token))
                                            ^^^^


Don't see a delete anywhere in the code. To be honest I doubt you actually need that new at all. If you just made your container hold objects all these problems would go away.


  I would be very appreciative if anyone could any suggestions on the algorithm, coding style, object-oriented design, etc.


Not sure that heap is the correct structure.

Sure it does sound correct initially. But you can increase the count of items that are already in the heap (which means you have to rebuild it from scratch).

I would just keep a sorted list of the top n items. When a count increases you at most need to move one item in the list.

I can't really review more than that because your code snipet is missing the most important thing. TYPE information.