Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于像std::map这样的关联容器,是否可以使用std::pair作为(唯一)模板参数?_C++_Templates_Typedef - Fatal编程技术网

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;
}