C++ 对于像std::map这样的关联容器,是否可以使用std::pair作为(唯一)模板参数?
对于我想知道的内容,标题可能不够描述性:C++ 对于像std::map这样的关联容器,是否可以使用std::pair作为(唯一)模板参数?,c++,templates,typedef,C++,Templates,Typedef,对于我想知道的内容,标题可能不够描述性: 考虑这个代码: typedef std::pair<std::string, int> myPair; typedef std::map<std::string, int> myMap; typedef std::pair myPair; typedef std::map myMap; 如您所见,两个typedef使用相同的模板参数。 现在,我想确保两个typedef始终使用相同的模板参数。 实现这一点的一种迂回方式可能是:
考虑这个代码:
typedef std::pair<std::string, int> myPair;
typedef std::map<std::string, int> myMap;
typedef std::pair myPair;
typedef std::map myMap;
如您所见,两个typedef使用相同的模板参数。
现在,我想确保两个typedef始终使用相同的模板参数。
实现这一点的一种迂回方式可能是:
typedef arg1 std::string;
typedef arg2 int;
typedef std::pair< arg1, arg2 > myPair;
typedef std::map< arg1, arg2 > myMap;
typedef arg1 std::string;
类型定义arg2 int;
typedef std::pairmyPair;
typedef std::mapmyMap;
现在,我想知道,是否有更好的方法,类似于:
typedef std::pair<std::string, int> myPair;
typedef std::map< myPair > myMap;
typedef std::pair myPair;
typedef std::mapmyMap;
提前感谢您为我们指明了正确的方向 #包括
#include <map>
#include <utility>
template <typename T>
struct make_map;
template <typename K, typename V>
struct make_map<std::pair<K,V> >
{
typedef std::map<K,V> type;
};
#包括
模板
结构制作图;
模板
结构生成映射
{
typedef std::映射类型;
};
测试:
#包括
int main()
{
typedef std::字符串arg1;
typedef int arg2;
typedef std::pair谢谢,这看起来是个不错的解决方案!
#include <string>
int main()
{
typedef std::string arg1;
typedef int arg2;
typedef std::pair<arg1, arg2> myPair;
typedef make_map<myPair>::type myMap;
myMap m;
m["foo"] = 1;
}