Gegeben zwei sortierte Vektoren bestehend aus eindeutigen Werten zwischen 0 und einigen bekannten 'n'. Und die Größe eines Vektors (set1) wird immer größer sein als die des Kandidatenvektors set2.Effiziente Art zu bestimmen, ob ein Vektor eine Untermenge eines anderen ist oder nicht?
Abfrage: Ist zu bestimmen, ob set2 eine Teilmenge von set1 ist oder nicht?
Ist ihre bessere und effizientere Art, dies abgesehen von der folgenden Implementierung in C++ 11 zu tun?
#include <iostream>
#include <vector>
bool subSetCheck(std::vector<int> set1, std::vector<int> set2) {
//Set1 & 2 are always sorted and contain only unique integers from 0 to some known 'n'
//Set1 is always larger than Set2 in size
std::vector<int>::iterator it1 = set1.begin();
std::vector<int>::iterator it2 = set2.begin();
bool subSet = true;
for (; (it1 != set1.end()) && (it2 !=set2.end()) ;) {
if (*it1 == *it2) {++it1; ++it2;}
else if(*it1 > *it2) ++it2;
else ++it1;
}
if (it1 ==set1.end()) subSet = false;
return subSet;
}
int main() {
std::vector<int> set1{0,1,2,3,4};
std::vector<int> set2{0,1,5};
if (subSetCheck(set1,set2)) std::cout << "Yes, set2 is subset of set1." << std::endl;
else std::cout << "No! set2 is not a subset of set1." << std::endl;
return 0;
}
std :: includes http://en.cppreference.com/w/cpp/algorithm/includes – Ceros
Fragen Sie nach einem effizienten Weg, um es zu erledigen, oder nach einer effizienten Methode, es von Grund auf neu zu implementieren? Wenn es der Erste ist, benutze den Std-Algorithmus, wenn es der Zweite ist, schau dir den Std-Algorithmus an;) – user463035818