C++ typedef для std::pair, а затем используйте typedef для объявления карты
Допустим, у меня есть этот 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 ответа
Просто...
std::map<MyType::first_type, MyType::second_type> myMap;
См. http://en.cppreference.com/w/cpp/utility/pair
Пример программы в Колиру
Если вы собираетесь делать это с множеством разных типов, вы можете настроить объявление псевдонима.
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.
Когда вы используете пару, это составляет один атрибут. Пара похожа на производный тип данных. Когда вы используете пару на карте, она считается ключом или значением на основе вашего объявления. Но первый и второй объекты пары не могут быть ключом и значениями на карте. Вы можете использовать typedef для обоих типов данных отдельно и использовать ярлыки или как упоминалось в предыдущем ответе. Вместо того, чтобы писать "std::" несколько раз, вы можете использовать using namespace std; Благодарю.