Alex Rivera | Logout

A std::map that keep track of the order of insertion?

Asked 2009-07-08T13:45:45.877
158

I currently have a std::map<std::string,int> that stores an integer value to a unique string identifier, and I do look up with the string. It does mostly what I want, except that it does not keep track of the insertion order. So when I iterate the map to print out the values, they are sorted according to the string; but I want them to be sorted according to the order of (first) insertion.

I thought about using a vector<pair<string,int>> instead, but I need to look up the string and increment the integer values about 10,000,000 times, so I don't know whether a std::vector will be significantly slower.

Is there a way to use std::map or is there another std container that better suits my need?

I'm on GCC 3.4, and I have probably no more than 50 pairs of values in my std::map.

Edit
Report

1 Answer

4

If you need both lookup strategies, you will end up with two containers. You may use a vector with your actual values (ints), and put a map< string, vector< T >::difference_type> next to it, returning the index into the vector.

To complete all that, you may encapsulate both in one class.

But I believe boost has a container with multiple indices.

answered 2009-07-08T13:52:32.123

Your Answer