First use of std::map in factors and prime factorization program
Looks generally ok. You can actually shorten iteration even more if your compiler supports range-based for loops:

for (auto iter = factors.begin(); iter != factors.end(); ++iter)
{
    std::cout &lt;&lt; "      " &lt;&lt; iter-&gt;first &lt;&lt; " x " &lt;&lt; iter-&gt;second &lt;&lt; "\n";
}


Can be written as:

for(const auto&amp; pair : factors) {
    std::cout &lt;&lt; "      " &lt;&lt; pair.first &lt;&lt; " x " &lt;&lt; pair.second &lt;&lt; "\n";
}


Further, prefer to return by value than pass by non-const reference:

void findFactors(uint64_t positiveInt, std::map&lt;uint64_t, uint64_t&gt; &amp;factors)


Should be 

std::map&lt;uint64_t, uint64_t&gt; findFactors(uint64_t positiveInt)


This will be exactly the same speed in about 98% of situations thanks to (Named) Return Value Optimization.

One final thing to be aware of with map: insertion (or lookup) using [] vs insert.  [] performs a lookup; if the value is not found, it is default-constructed and then the copy-assignment operator (operator=) is called to give the object its value. Thus, [] performs a lookup, construction and copy assignment. It also requires a default constructor to be available. insert, on the other hand does not require a default constructor, and will (from memory) call only the copy constructor. It is thus often (slightly) faster (although for plain old data, the difference will be non-existent). The big difference is not requiring a default constructor, which may not exist.

Finally, a really small thing: it should (technically) be std::uint64_t. Importing &lt;cstdint&gt; (as opposed to stdint.h), based on the C++ spec, will guarantee that this (and uint32_t, etc) will live in the std namespace. It may also put them in the global namespace. Most headers seem to put them in both, but to be 100% portable (according to the standard, anyway), it should be prefixed with a std (or brought into scope with a using std::uint64_t).