Type_index
Why use type_index instead of type_info
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <typeinfo>
#include <typeindex>

int main(int argc, char *argv[])
{
	//index
	std::cout<<std::type_index(typeid(int)).name()<<std::endl;
	std::cout<<std::type_index(typeid(double)).name()<<std::endl;

	std::string name;
	std::cout<<std::type_index(typeid(name)).name()<<std::endl;

	std::vector<std::string> stringContainer;
	std::vector<int> intContainer;
	std::cout<<std::type_index(typeid(stringContainer)).name()<<std::endl;
	std::cout<<std::type_index(typeid(intContainer)).name()<<std::endl;

	//map
	std::map<std::type_index, std::string> m;
	m[std::type_index(typeid(int))] = "int";

	int n;
	std::cout<<m[std::type_index(typeid(n))]<<std::endl;

	std::map<std::type_info, std::string> m2;
	//m2[typeid(int)] = "int";//error

	return 0;
}
			
Reference