954,505 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

trying to get the second 2nd value of same key in multimap

I am unable to get the "is" I keep getting the below:

the find : this
the find : this

what I want is:

the find : this
the find : is

from the below code:

typedef multimap<int,string> IntStringMMap;

IntStringMMap coll; // container for int/string values

coll.insert(make_pair(2,"a"));
coll.insert(make_pair(1,"this"));
coll.insert(make_pair(4,"of"));
coll.insert(make_pair(1,"is"));
coll.insert(make_pair(3,"multimap"));


IntStringMMap::iterator post = coll.find(1);
cout << "the find : " << post->second << endl;
post = coll.find(1);
cout << "the find : " << post->second << endl;
pengwn
Newbie Poster
5 posts since Oct 2006
Reputation Points: 31
Solved Threads: 1
 

I am unable to get the "is" I keep getting the below: the find : this the find : this what I want is: the find : this the find : is from the below code:

typedef multimap<int,string> IntStringMMap;

IntStringMMap coll; // container for int/string values

coll.insert(make_pair(2,"a"));
coll.insert(make_pair(1,"this"));
coll.insert(make_pair(4,"of"));
coll.insert(make_pair(1,"is"));
coll.insert(make_pair(3,"multimap"));


IntStringMMap::iterator post = coll.find(1);
cout << "the find : " << post->second << endl;
post = coll.find(1);
cout << "the find : " << post->second << endl;

Hmm, have you looked at the documentation for std::map perhaps?

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

multimap::find returns only the first match. So calling it twice will not make any difference. You will have to loop through the map and see if the key is equal to the value you are looking for.
Something like this perhaps.

size_t no_of_items = coll.count(1);
    size_t matches_found =0 ;
    IntStringMMap::iterator itr;
    for (itr = coll.begin(); itr != coll.end() && matches_found < no_of_items ; ++itr) 
    {
        if (itr->first == 1) 
        {
            cout << "the find : " << itr->second << endl;
            ++matches_found;
        }
    }
WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

std::map doesnt allow duplicate keys.
Another easy way to implement the solution is to use equal_range to get the start and end positions of elements with matching key value, and iterate between them, to locate all the elements.
Also there may be some functions that you can use in the stl::algorithm library.

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

>std::map doesnt allow duplicate keys.

True, my bad.

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You