C++ typedef a std::pair 然后使用typedef声明一个map

C++ typedef a std::pair and then use the typedef to declare a map

假设我有这个 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 而不是重新键入类型来做到这一点?

简直...

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

http://en.cppreference.com/w/cpp/utility/pair

示例程序位于 coliru

当您使用一对时,它相当于一个属性。 Pair 就像派生数据类型。当您在地图中使用一对时,它会根据您的声明被视为键或值。但是一对中的第一个和第二个对象不能是映射中的键和值。您可以分别对这两种数据类型使用 typedef 并使用快捷方式或如上一个答案中所述。您可以使用 "std::" 而不是重复编写 使用命名空间标准;谢谢。

如果您要对许多不同的类型执行此操作,您可以设置一个别名声明

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。