Я новичок в C++.Сравните все элементы std :: vector с любым другим элементом в одном и том же векторе.
Я пытаюсь найти, как итерации через вектор, чтобы сравнить каждый элемент с любым другим элементом, где порядок сравнения не имеет значения где;
(а «по сравнению с» Ь) = (Ь «по сравнению с» а)
Так проверяя один означает, что вам не нужно сравнивать все значения с любым другим значением, как раз остальные из них.
У меня есть что-то похожее на этот ИГРУШИТЕЛЬНЫЙ алгоритм;
#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)};
Я фактически сравниваю линии, чтобы найти те, которые пересекают не простые двойники, но техника будет такой же.
Это;
for (auto it2 = it1.next(); (it2 != v.end()); it2++)
часть, которая, я думаю, может быть выполнена более эффективно с использованием лямбда.
Этот подход работает, но;
Это самый эффективный способ проведения такого рода итераций?
Это может быть сделано как лямбда с использованием зЬй :: for_all()?
Спасибо.
Является ли отношение больше или меньше, чем определено? Если это так, вы можете сортировать списки, и можно будет избежать сравнения всего. –
Не знаю, будет ли это работать ... Я ОСНАСТНО сравниваю строки, которые INTERSECT не являются простыми числами, поэтому я искал обобщенную форму для решение НЕ просто удваивается. –
Вы получите неправильный символ, если вектор содержит три (или более) равных элемента. –