| 36 | |
| 37 | template <class T> |
| 38 | void RemoveDuplicatesAndKeepOrder(std::vector<T> & vec) |
| 39 | { |
| 40 | ankerl::unordered_dense::set<T> seen; |
| 41 | auto const predicate = [&seen](T const & value) |
| 42 | { |
| 43 | if (seen.contains(value)) |
| 44 | return true; |
| 45 | seen.insert(value); |
| 46 | return false; |
| 47 | }; |
| 48 | vec.erase(remove_if(vec.begin(), vec.end(), predicate), vec.end()); |
| 49 | } |
| 50 | |
| 51 | // Also filters out duplicates. |
| 52 | class MultivalueCollector |