# Pairs in map

Hello guys,

Today I was solving this problem: https://www.codechef.com/ICPCIN19/problems/TRAINSET
and I thought of doing it using maps with string as key and value in the map as pair ( pair consists of the number of occurrences of the string with bool 0 and bool 1)

And every time I encounter a string , if it is already in the map then I want to increase the number in the pair by 1 if it is not there I will insert the key and value pair in the map

I implemented this and here is my code :

https://pastebin.com/m2jpqdDe

It will be good if someone tells me how to access the first and the second element of pairs in map

Thanks a lot!

Just change:

``````if(b == 0) it.second.first++;
else it.second.second++;
``````

to

``````if(b == 0) it->second.first++;
else it->second.second++;
``````

Edit:

Or even better, replace the body of the `for` loop with:

``````            cin >> s >> b;
if (b == 0)
{
m[s].first++;
}
else
{
m[s].second++;
}
``````
4 Likes

What if key s is not in the map initially ?

Whatâ€™s the difference between using a dot and -> ?

If you use `.`, you are trying to access the member named â€ś`first`â€ť (or â€ś`second`â€ť) of the iterator object, which doesnâ€™t exist.

If you use `->` then you are dereferencing the iterator (to obtain a reference to the object the iterator is referring to) and then trying to access the member named â€ś`first`â€ť/"`second`" of that referred object, which does exist.

In other words, by convention, `it->blah` behaves like `(*it).blah`, as would be the case if you were dealing with pointers (also by convention, `iterators` are designed to look/ behave like pointers).

3 Likes

@ssjgz
I got AC , but i wanted to know how this works if the key is not in the map initially

My code :

https://pastebin.com/5WQVvgx5

In the 29th line I am still using x.second.second and it is not giving an error there
Why ?

See the documentation for `std::map::operator[]` here.

2 Likes

On line 29, the variable `x` is not an iterator: it is an object of type `pair<string, pair<ll, ll>>`.

2 Likes

Oh ok
Thanks a lot !! @ssjgz

1 Like