Project Euler #12 in C++ - highly divisible triangular number
This:

int i = 2;
while (overall_factors(i) &lt; 500)
{
    std::cout &lt;&lt; overall_factors(i) &lt;&lt; std::endl;
    ++i;
}


can just be a for-loop:

for (int i = 2; overall_factors(i) &lt; 500; ++i)
{
    std::cout &lt;&lt; overall_factors(i) &lt;&lt; std::endl;
}


I'd also recommend using a constant for 500 as it is otherwise a magic number.  This will make it clear as to what this value represents.

If the number isn't significant to the general algorithm, then a comment can be added instead.
There is no need for divisors to just return a 0.  It appears it's just modifying the map and displaying it.  Also, these are two different things, and a function should just have one role.  In this case, it should just modify the map.  You should then have a separate void function for displaying the map in the desired format.

Although passing the map by reference is okay here, passing it by value (in C++11) will also allow the compiler to decide to perform a move, if desired over a copy.