#include <map>
#include <utility>
#include <iostream>
#include <algorithm>

using namespace std;


namespace {

    auto pair2params = [](auto&& f)
    {
    	return [f](auto&& p) {
    		f(p.first, p.second);
    	};
    };
    
    
    template<typename Rng, typename Pred>
    auto for_each(const Rng& rng, Pred&& pred) -> void
    {
    	for_each(begin(rng), end(rng), pred);
    }

}


int main()
{
    auto values = map<int, string>{
        {0, "hello"},
        {1, "world!"}
    };
    
    for_each(values, pair2params([](int key, const string& value) {
        cout << key << ": " << value << "\n";
    }));
}