Meine Antwort geht davon aus, dass Sie, wenn Sie "Teilmenge" sagen, eigentlich eher nach dem Äquivalent einer "Teilzeichenkette" suchen, d. h. die Reihenfolge der Elemente während der Suche beibehalten.
Letztendlich kann ich mir nicht vorstellen, wie man das in weniger als O(n*m)
. Da kann man ganz einfach seine eigene Rolle spielen:
template <typename T1, typename T2>
bool contains(std::vector<T1> const& a, std::vector<T2> const& b) {
for (typename std::vector<T1>::const_iterator i = a.begin(), y = a.end(); i != y; ++i) {
bool match = true;
typename std::vector<T1>::const_iterator ii = i;
for (typename std::vector<T2>::const_iterator j = b.begin(), z = b.end(); j != z; ++j) {
if (ii == a.end() || *j != *ii) {
match = false;
break;
}
ii++;
}
if (match)
return true;
}
return false;
}
Live-Demo.
(Sie könnten wahrscheinlich kreativer mit den Parametern der Vorlage umgehen).
1 Stimmen
Was ist, wenn Vektor 1 Duplikate hat? Muss auch Vektor 2 ähnliche Duplikate haben?
1 Stimmen
Warum müssen Sie das tun? Was ist so schlimm daran, sie zu sortieren?
2 Stimmen
Klingt so, als hätten Sie sich eine
std::set
möglicherweise in erster Linie. Sind Sie sicher dassstd::vector
ist das, was Sie wollen?0 Stimmen
Verwandt: stackoverflow.com/questions/4068141/ (obwohl die einzige brauchbare Antwort in etwa
std::includes
(Sie haben recht: es setzt eine sortierte Eingabe voraus).0 Stimmen
Es gibt in keinem der Vektoren Duplikate
0 Stimmen
Was ist also falsch am Sortieren?
0 Stimmen
@Gene: Vielleicht spielt die Reihenfolge eine Rolle?
0 Stimmen
@Tomalak - inwiefern spielt die Reihenfolge eine Rolle?
0 Stimmen
@Gene: Fragen Sie den OP. Er hat sich nicht dazu geäußert, ob es so ist oder nicht; Sie haben einfach vorschnell den Schluss gezogen, dass es nicht so ist.
0 Stimmen
Wenn es auf die Reihenfolge ankommt, macht es keinen Sinn, überhaupt von Mengen oder Teilmengen zu sprechen. Mathematisch gesehen ist eine Menge so definiert, dass die Reihenfolge irrelevant ist. Andernfalls wäre es ein Tupel. Wenn die Reihenfolge eine Rolle spielt, dann ist diese Operation nicht wirklich eine Teilmenge, sondern etwas anderes. Soweit ich das beurteilen kann, scheint es, als könne er sie nicht sortieren, weil er die verwendeten Daten nicht ändern kann.