c++stdstdvectorstdstring

How do I get the number of different or common elements between two vectors of strings?


Is there a function to compare two string vectors to return the number of different (or the same) elements? Do I have to iterate over both of them and test item by item?


Solution

  • // C++20
    std::ranges::sort(v1);
    std::ranges::sort(v2);
    std::vector<std::string> v3;
    std::ranges::set_intersection(v1, v2, std::back_inserter(v3));
    
    // any version
    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());
    std::vector<string> v3;
    std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
    

    Or, if you don't want to sort:

    std::set<std::string> s1(v1.begin(), v1.end());
    std::set<std::string> s2(v2.begin(), v2.end());
    std::vector<std::string> v3;
    
    // C++20
    std::ranges::set_intersection(s1, s2, std::back_inserter(v3));
    // any version
    std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(v3));
    

    You may want to use a multiset if there could be duplicates in a vector.