Struktura para

Napraviti strukturu pair koja predstavlja par vrednosti tipova T i U. Implementirati sledeće funkcije:

template <typename T, typename U>
pair<T, U> make_pair(const T &first, const U &second);

template <typename T, typename U>
pair<U, T> swap_pair(pair<T, U> &p);

Dodatno: Napraviti klasu pair umesto strukture, i implementirati konstruktor koji prima dva argumenta tipova T i U za inicijalizaciju članova first i second.

Test

#include <iostream>
#include <string>

namespace matf {

	// Ovde ide vasa implementacija

	template <typename T, typename U>
	pair<T, U> make_pair(const T &first, const U &second)
	{
		// Ovde ide vasa implementacija
	}

	template <typename T, typename U>
	pair<U, T> swap_pair(const pair<T, U> &p)
	{
		// Ovde ide vasa implementacija
	}

} // namespace matf

int main(void)
{
	matf::pair<int, double> p = matf::make_pair(1, 3.14);
	std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;
	// Output: First: 1, Second: 3.14

	matf::pair<std::string, int> sp = matf::make_pair(std::string("age"), 30); // have to pass std::string explicitly
	std::cout << "First: " << sp.first << ", Second: " << sp.second << std::endl;
	// Output: First: age, Second: 30

	matf::pair<char, std::string> cp = matf::make_pair<char, std::string>('A', "Apple"); // or have to pass both types explicitly
	std::cout << "First: " << cp.first << ", Second: " << cp.second << std::endl;
	// Output: First: A, Second: Apple

	matf::pair<std::string, char> swapped_cp = matf::swap_pair(cp);
	std::cout << "First: " << swapped_cp.first << ", Second: " << swapped_cp.second << std::endl;
	// Output: First: Apple, Second: A

	return 0;
}

Rešenje

main.cpp

#include <iostream>
#include <string>

namespace matf {

	template <typename T, typename U>
	struct pair {
		T first;
		U second;
	};

	template <typename T, typename U>
	pair<T, U> make_pair(const T &first, const U &second)
	{
		pair<T, U> p;

		p.first = first;
		p.second = second;

		return p;
	}

	template <typename T, typename U>
	pair<U, T> swap_pair(const pair<T, U> &p)
	{
		pair<U, T> swapped_pair;

		swapped_pair.first = p.second;
		swapped_pair.second = p.first;

		return swapped_pair;
	}

} // namespace matf

int main(void)
{
	matf::pair<int, double> p = matf::make_pair(1, 3.14);
	std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;
	// Output: First: 1, Second: 3.14

	matf::pair<std::string, int> sp = matf::make_pair(std::string("age"), 30); // have to pass std::string explicitly
	std::cout << "First: " << sp.first << ", Second: " << sp.second << std::endl;
	// Output: First: age, Second: 30

	matf::pair<char, std::string> cp = matf::make_pair<char, std::string>('A', "Apple"); // or have to pass both types explicitly
	std::cout << "First: " << cp.first << ", Second: " << cp.second << std::endl;
	// Output: First: A, Second: Apple

	matf::pair<std::string, char> swapped_cp = matf::swap_pair(cp);
	std::cout << "First: " << swapped_cp.first << ", Second: " << swapped_cp.second << std::endl;
	// Output: First: Apple, Second: A

	return 0;
}