Jak można rozwiązać taki problem:
1. Sprawdzić czy istnieją już funkcje, które to rozwiązują lub upraszczają rozwiązanie. Przykładowo:
//** funkcja FIND - sprawdzenie czy wektor V zawiera element X **/
#include <algorithm>
if( std:: find( v .begin() , v .end() , x ) != v .end() ) {
/* ZAWIERA*/
} else {
/* NIE ZAWIERA */
}
//** funkcja INCLUDES - sprawdzenie czy posortowany zakres zawiera inny posortowany zakres **/
template <typename T>
bool IsSubset(std::vector<T> A, std::vector<T> B)
{
std ::sort( A .begin() , A .end() );
std ::sort( B .begin() , B .end());
return std ::includes( A .begin() , A .end() , B .begin() , B .end() );
}
2. Twój pomysł może osiągnąć poziom rozwiązania poprawnego. Wystarczy przeanalizować jego działanie i szukać co nie działa tak jak planowałeś. Gdyby wystarczył rezultat: "Pierwszy vector zawiera wszystkie elementy drugiego vectora w przynajmniej jednej kopii" wtedy wystarczyła by prosta zmiana:
count++;
break;
W przeciwnym razie podszedłbym to rozwiązania inaczej:
bool contains_all( std::vector<int> vec, std::vector<int> vec2 )
{
//** KROK 1: Sortowanie wektorów **/
std::sort( vec .begin(), vec .end() );
std::sort( vec2 .begin(), vec2 .end() );
auto v_pos { vec .begin() };
//** KROK 2: Czy każdy element vectora 2... **/
for ( auto& elem : vec2 )
{
//** KROK 3: Zawiera się w wektorze pierwszym **/
while ( v_pos < vec .end() )
{
//cout << format( " [ {0} ] == [ {1} ] " , elem , *v_pos ) << endl;
if ( elem == *v_pos )
{
/** Tak, więc przechodzę do następnego elementu vec **/
++v_pos;
/** Sprawdzam kolejny element vec2 **/
break;
}
else if ( *v_pos > elem )
{
/** Dalej już nie znajdziemy bo wektory są posortowane. **/
return false;
}
v_pos++;
}
}
return( ( v_pos < vec .end() ) ); // TRUE gdy Nie przekroczyło zakresu vec i sprawdzono wszystkie elementy vec2.
}
Przepis masz podany wraz z rozwiązaniem, które cię pewnie nie zainteresuje ;), ale korzystając z przepisu możesz ugotować własną funkcję.