Two Lines of C++ Code to Convert an Array into Sorted Unique Elements


Let’s say, we want to extract the unique elements (numbers) in a given array (vector, list) and return them in sorted order. For example,

The array is [1, 1, 0, 0, 2], and the output is [0, 1, 2].

You can write a method in a straightforward method with two steps – extract unique numbers and then sort them.

1
2
3
4
5
6
7
8
9
10
11
12
template <class T>
vector<T> uniqueAndSorted(const vector<T> &arr) {
    unordered_set<T> data;
    vector<T> ans;
    for (const auto &n: arr) {
        if (data.count(n)) continue;
        data.insert(n);
        ans.push_back(n);
    }
    sort(begin(ans), end(ans));
    return ans;
}
template <class T>
vector<T> uniqueAndSorted(const vector<T> &arr) {
    unordered_set<T> data;
    vector<T> ans;
    for (const auto &n: arr) {
        if (data.count(n)) continue;
        data.insert(n);
        ans.push_back(n);
    }
    sort(begin(ans), end(ans));
    return ans;
}

You can, implement this with the following two liner – which makes use of the set (which maintains the key in sorted order). First, we construct the set based on the given array – which will give us a set that contains unique elements. Then we just need to construct the returned vector/array and the items will be automatically in sorted order as the set maintains the keys in ascending order.

1
2
3
4
5
template <class T>
vector<T> uniqueAndSorted(const vector<T> &arr) {
    set<int> ans(begin(arr), end(arr));
    return vector<T>(begin(ans), end(ans));
}
template <class T>
vector<T> uniqueAndSorted(const vector<T> &arr) {
    set<int> ans(begin(arr), end(arr));
    return vector<T>(begin(ans), end(ans));
}

–EOF (The Ultimate Computing & Technology Blog) —

GD Star Rating
loading...
293 words
Last Post: Greedy Algorithm to Find Valid Matrix Given Row and Column Sums
Next Post: O(NLogN) to Compute the Median in a Stream using Two Priority Queues

The Permanent URL is: Two Lines of C++ Code to Convert an Array into Sorted Unique Elements

Leave a Reply