C++ Trie using std::map and std::unique_ptr
I don't see the need for unique_ptr for the root node.

spNode root;


I would just make this a node.

Node root;


The use of std::map is fine. But it does have O(log(n)) lookup. If you switch back to an array its O(1). Its a time for space thing. Pick the one you want.

I don't like the two line creation of nodes.

        std::unique_ptr&lt;Node&gt; node(new Node());
        temp-&gt;children[c] = std::move(node);


Just use reset:

        temp-&gt;children[c].reset(new Node());


Or if you have C++14 use std::make_unique()

        temp-&gt;children[c] = std::make_unique&lt;Node&gt;();


Personally search() does not seem quite the correct verb.

bool search(const std::string&amp; str);


What is wrong with find()?