The general idea is that you need another data structure to help you achieve this, because your map is already sorted based on keys (the sorting for std::map is done during insertion of nodes).
First you need to define whether you just need the sorted values of the map or you need to preserve the pairs to be able to access the keys after sorting based on value.
For the first option:
Use std::set
Use std::set only if you don't need the duplicate values. Also beware that insertion, deletion, and search has O(log(n)) complexity.
Use std::vector
Using std::vector can allow you to keep duplicates, however the std::vector component is not sorted by default so you'd need a call to std::sort after insertion. So total complexity will be O(N) for copying the values, and O(Nlog(N)) for sorting.
For the second option:
You can use std::map or std::vector. You can refer the following link that shows how to do this using a transformed map or vector.
Sorting std::map using value
Your choice in the end of what data structure to use should be judged by how this data structure will be used for the rest of the program.