| chrisloeys (2) | |
|
Hello all, Suppose I have a vector which contains the elements {6, 1, 3, 4, 1, 7, 5, 3, 7}. What I've been trying to do is extract the duplicate values, in this case {1, 1, 3, 3, 7, 7}, and make that into a new vector. The old vector still has to remain intact however. I really can't figure out how I would tackle this efficiently, and searching around the internet I've only found examples where they delete the duplicates from a vector. Does anyone have a clever idea how I could do this? I've really been breaking my head around how to do this in an elegant way. | |
|
|
|
| Duoas (6732) | |||
Enjoy. [edit] Sorry, some notes for you. You cannot do it efficiently unless you first sort the range. Hence, copy and sort is the first thing we do. Then we apply an algorithm that does the opposite of what std::unique() does. Hope this helps. | |||
|
Last edited on
|
|||
| chrisloeys (2) | |
| Thanks a lot, this is exactly what I've been looking for! | |
|
|
|
| Duoas (6732) | |
|
One more note: If you want to maintain relative order of equivalent elements, sort with std::stable_sort(). The algorithm assumes that your equivalence predicate (the == operator) may not be the default, 'exactly equal' predicate. (I could have made it a bit simpler if it were safe to assume that.) Glad to be of help. :O) | |
|
|
|