How to flatten a 2D array into a sorted one-dimensional vector with unique values in C++

2 Answers

0 votes
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <set>

int main() {
    std::vector<std::vector<int>> array2d = {
        {4, 3, 3, 2},
        {30, 10, 9},
        {10},
        {1, 1, 6, 7, 7, 7, 8},
    };

    std::set<int> uniqueValues;

    for (const auto& row : array2d) {
        uniqueValues.insert(row.begin(), row.end());
    }

    for (const auto& n : uniqueValues) {
        std::cout << n << " ";
    }
}




/*
run:

1 2 3 4 6 7 8 9 10 30 

*/

 



answered Aug 15, 2024 by avibootz
0 votes
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

// Function that flattens a 2D vector and returns a sorted set of unique values
std::set<int> flattenAndSortUnique(const std::vector<std::vector<int>>& array2d) {
    std::set<int> uniqueValues;

    // Insert all values from each row into the set
    // std::set automatically removes duplicates and keeps values sorted
    for (const auto& row : array2d) {
        uniqueValues.insert(row.begin(), row.end());
    }

    return uniqueValues;
}

int main() {
    std::vector<std::vector<int>> array2d = {
        {4, 3, 3, 2},
        {30, 10, 9},
        {10},
        {1, 1, 6, 7, 7, 7, 8},
    };

    // Call the function
    std::set<int> uniqueValues = flattenAndSortUnique(array2d);

    // Print sorted unique values
    for (const auto& n : uniqueValues) {
        std::cout << n << " ";
    }
}
 
 
/*
run:
 
1 2 3 4 6 7 8 9 10 30 
 
*/

 



answered 8 hours ago by avibootz

Related questions

...