#include <iostream>
#include <vector>
#include <set>
#include <functional>
#include <iostream>
using namespace std;

template <typename A, typename B> 
auto map( const A & source, const B & b )
-> std::vector< decltype( b(*source.begin()) ) >
{
	auto result = std::vector< decltype( b(*source.begin()) ) >();
	for( auto & element: source)
	{
		result.push_back( b(element) );
	}
	return result;
}

float convert( int num )
{
	return num;
}

int main() {
	
	std::vector<int> ints = {1,2,3,4,5};
	std::set<int> int_set = {7,8,9};
	std::vector<float> floats = map( ints, []( int v) -> float { return v;} );
	std::vector<float> floats2 = map( int_set, []( int v) -> float { return v;} );
	for( auto & n: floats)
	{
		std::cout << n << std::endl;
	}
	
	std::cout << "---" << std::endl;
	for( auto & n: floats2)
	{
		std::cout << n << std::endl;
	}
	
	return 0;
}