tags:

views:

312

answers:

2

I'm adding two different elements to both std::list and std::set and I want the std::list to be sorted with the same order as of std::set. one way I tried is when the element is added to std::set, find that element then get the index of that element using std::distance(begin, found) and then insert the element to that index in std::list. is there any other way?

A: 

It is too complicated a way! In fact std::set implemented as binary tree, and uses std::less for sorting (by default). Also this provides "stable" iterator, it is mean that iterator returned by std::set::insert will be valid until element explicitly erased. So you can put just inserted iterator to std::list. And wise verse - std::list has also stable iterator, so you can put items to list but place iterators to set. In last way just override std::less

Dewfy
+4  A: 

You should use the std::map, with the data you put in the set as key, and the data you put in the list as value.

This way your list elements will be ordered.

Stéphane