whiteSkar
whiteSkar

Reputation: 1644

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

Let's say I have this typedef

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

Then, if I also want to create a map using MyType, how do I do it?

I don't want to re-type the two types in the pair like:

map<std::string, uint32_t> myMap;

I want something like:

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

Is there a way to do it like that using my typedef MyType instead of re-typing the types?

Upvotes: 6

Views: 19721

Answers (3)

DXsmiley
DXsmiley

Reputation: 539

If you're going to be doing this with a lot of different types, you can set up an alias declaration.

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;

This requires at least c++11.

Upvotes: 5

Basant kumar Bhala
Basant kumar Bhala

Reputation: 194

When you are using a pair it amounts to a single attribute. Pair is like a derived data type. When you are using a pair in map, it is considered as a key or a value based on your declaration. But the first and second objects of a pair can't be the key and values in a map. You can use typedef for both the data types separately and use the shortcuts or as mentioned in the previous answer. Instead of writing "std::" repeatedly, You can use using namespace std; Thanks.

Upvotes: 0

Tony Delroy
Tony Delroy

Reputation: 106096

Simply...

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

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

Sample program at coliru

Upvotes: 9

Related Questions