Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inserting elements at desired positions in a STL map

map <int, string> rollCallRegister;
map <int, string> :: iterator rollCallRegisterIter;
map <int, string> :: iterator temporaryRollCallRegisterIter;

rollCallRegisterIter     = rollCallRegister.begin ();
tempRollCallRegisterIter = rollCallRegister.insert (rollCallRegisterIter, pair <int, string> (55, "swati"));

rollCallRegisterIter++;
tempRollCallRegisterIter = rollCallRegister.insert (rollCallRegisterIter, pair <int, string> (44, "shweta"));

rollCallRegisterIter++;
tempRollCallRegisterIter = rollCallRegister.insert (rollCallRegisterIter, pair <int, string> (33, "sindhu"));

// Displaying contents of this map.
cout << "\n\nrollCallRegister contains:\n";
for (rollCallRegisterIter = rollCallRegister.begin(); rollCallRegisterIter != rollCallRegister.end(); ++rollCallRegisterIter)
{
    cout << (*rollCallRegisterIter).first << " => " << (*rollCallRegisterIter).second << endl;
}

Output:

rollCallRegister contains:
33 => sindhu
44 => shweta
55 => swati

I have incremented the iterator. Why is it still getting sorted? And if the position is supposed to be changed by the map on its own, then what's the purpose of providing an iterator?

like image 561
Aquarius_Girl Avatar asked Nov 27 '25 17:11

Aquarius_Girl


1 Answers

Because std::map is a sorted associative container.

In a map, the key value is generally used to uniquely identify the element, while the mapped value is some sort of value associated to this key.

According to here position parameter is

the position of the first element to be compared for the insertion operation. Notice that this does not force the new element to be in that position within the map container (elements in a set always follow a specific ordering), but this is actually an indication of a possible insertion position in the container that, if set to the element that precedes the actual location where the element is inserted, makes for a very efficient insertion operation. iterator is a member type, defined as a bidirectional iterator type.

So the purpose of this parameter is mainly slightly increasing the insertion speed by narrowing the range of elements.

You can use std::vector<std::pair<int,std::string>> if the order of insertion is important.

like image 142
ali_bahoo Avatar answered Nov 30 '25 06:11

ali_bahoo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!