How do I remove duplicates with std::span?

This guide demonstrates how to remove duplicates from a collection in C++ using `std::span`. It provides a simple and effective method to filter out duplicate elements from a contiguous range without the need for additional data structures.
C++, std::span, remove duplicates, programming, C++ standard library

#include 
#include 
#include 
#include 
#include 

template
std::span remove_duplicates(std::span input) {
    std::set seen;
    auto end_it = std::remove_if(input.begin(), input.end(), [&](const T& value) {
        // If the value is already seen, we should remove it
        if (seen.find(value) != seen.end()) {
            return true; // Mark for removal
        } else {
            seen.insert(value);
            return false; // Keep this value
        }
    });
    return std::span(input.data(), std::distance(input.begin(), end_it));
}

int main() {
    std::vector data = {1, 2, 3, 2, 1, 4};
    auto result_span = remove_duplicates(std::span(data));
    
    for (const auto& value : result_span) {
        std::cout << value << " ";
    }
    
    return 0;
}
    

C++ std::span remove duplicates programming C++ standard library