Ich bin neu in C++.Vergleichen Sie alle Elemente eines std :: Vektor mit jedem anderen Element in demselben Vektor effizient
Ich versuche zu finden, wie man durch einen Vektor iteriert, um jedes Element mit jedem anderen Element zu vergleichen, wobei die Vergleichsreihenfolge irrelevant ist;
(a 'im Vergleich zu' b) = (b 'im Vergleich zu' a)
So Überprüfung eines bedeutet, dass Sie nicht jeden Wert zu jedem anderen Wert vergleichen müssen, nur die restlichen Einsen.
Ich habe etwas, das wie dieser TOY Algorithmus ist;
#include <vector>
typedef std::vector<double> vector_t;
int countTheFoo(const vector_t &v)
{
int fooFound {0};
for (auto it1 = v.begin(); (it1 != v.end()); it1++)
{
for (auto it2 = it1.next(); (it2 != v.end()); it2++)
{
if testForFoo(*it1, *it2)
{
// Woot! Found some...
fooFound++;
}
}
}
return fooFound;
}
vector_t foo { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };
int numFoo {countTheFoo(foo)};
bin vergleiche ich tatsächlich Linien diejenigen zu finden, die nicht einfach verdoppelt schneidet aber die Technik wäre das gleiche.
Es ist das;
for (auto it2 = it1.next(); (it2 != v.end()); it2++)
Teil, dass ich denke, könnte effizienter mit Lambdas getan werden.
Dieser Ansatz funktioniert, aber;
Ist es die effizienteste Art, diese Art von Iteration durchzuführen?
Kann es als Lambda mit std :: for_all() getan werden?
Vielen Dank.
Ist eine größere als/kleiner als Beziehung definiert? Wenn ja, können Sie die Listen sortieren, und es wird möglich sein, alles zu vergleichen. –
Weiß nicht, ob das funktionieren würde ... Ich vergleiche LINKS, die nicht einfache Zahlen INTERSECT, also suchte ich nach einer verallgemeinerten Form für die Lösung NICHT einfach verdoppelt. –
Sie erhalten eine falsche cont, wenn der Vektor drei (oder mehr) gleiche Elemente enthält –