C ++ typedef一个std :: pair然后使用typedef来声明一个地图

时间:2016-01-18 06:13:13

标签: c++ dictionary typedef std-pair

假设我有这种typedef

typedef std::pair<std::string, uint32_t> MyType;

然后,如果我还想使用MyType创建地图,我该怎么做?

我不想重新输入对中的两种类型,如:

map<std::string, uint32_t> myMap;

我想要类似的东西:

map<MyType's first type, MyType's second type> myMap;

有没有办法像使用我的typedef MyType那样做而不是重新输入类型?

3 个答案:

答案 0 :(得分:6)

...简单地

std::map<MyType::first_type, MyType::second_type> myMap;

请参阅http://en.cppreference.com/w/cpp/utility/pair

coliru

的示例程序

答案 1 :(得分:3)

如果您要使用许多不同类型执行此操作,则可以设置别名声明

template <typename T>
using pair_map = std::map< typename T::first_type, typename T::second_type>;

typedef std::pair<std::string, int> MyType;

pair_map<MyType> my_map;

至少需要c ++ 11。

答案 2 :(得分:0)

当您使用一对时,它相当于一个属性。 Pair就像派生数据类型。当您在地图中使用一对时,它将被视为基于您的声明的键或值。但是一对中的第一个和第二个对象不能是地图中的关键和值。您可以分别对两种数据类型使用typedef,并使用快捷方式或上一个答案中提到的。你可以使用,而不是重复写“std ::” 使用命名空间std; 谢谢。