LRU cache implementation in C++ using unordered_map and doubly linked list
Code simplification

You don't need to use a custom linked list here. std::list will do fine, too. 

You can keep the pairs (key, value) in an std::list and store a mapping from keys to iterators in this list in an std::unordered_map.

Passing by const reference

Passing keys and values by value creates an extra copy, which may be expensive. You can pass them by a const reference to avoid it.

Comments

Redundant comments clutter the code and hurt its readability, for instance:

// move the page to front
m_pageList-&gt;Move_Page_To_Front(m_pageMap[key]);


Delete this kind of comments.

API design

if (m_pageMap.find(key) == m_pageMap.end()) {
    return -1;
}


Returning -1 is a terrible idea. Firstly, -1 can be a valid value. Secondly, it won't compile for an arbitrary type of values, so it makes the use of your cache extremely limited.

Here're several ways to fix it:


Change the return type to std::optional&lt;Value&gt;. It works with C++17 only, but you can use boost::optional&lt;Value&gt; with earlier version of the standard.
If neither C++ 17 nor boost is available, you can return something that can either contain a value or be empty (like a smart pointer to a Value).
You can throw an exception if the key is missing.
You can insert a default value for the key and return it.


I prefer the first option as the optional type accurately reflects what may happen: there's either a value or nothing.