Следует иметь в виду, что векторы не упорядочены, поэтому использование std :: equal или оператора «==» обычно не может использоваться для обеспечения правильного сравнения того, если два вектора содержат одни и те же элементы, но в другом порядке. Они сравнивают, что векторы имеют одинаковое содержимое в том же порядке (но не в разном порядке).
Для многих случаев использования этого может быть достаточно. Но могут быть случаи, когда вы хотите знать, имеют ли два вектора одинаковое содержимое, но не обязательно в том же порядке. Для этого вам нужна другая функция.
Одна красивая и краткая реализация - это следующая. Было предложено здесь: https://stackoverflow.com/questions/17394149/how-to-efficiently-compare-vectors-with-c/17394298#17394298 Там вы также найдете обсуждение о том, почему вы не можете использовать его ...
Поместите это в заголовочном файле по вашему выбору:
#include <algorithm>
template <class T>
static bool compareVectors(std::vector<T> a, std::vector<T> b)
{
if (a.size() != b.size())
{
return false;
}
::std::sort(a.begin(), a.end());
::std::sort(b.begin(), b.end());
return (a == b);
}
И здесь пример, иллюстрирующий описанную выше теорию:
std::vector<int> vector1;
std::vector<int> vector2;
vector1.push_back(100);
vector1.push_back(101);
vector1.push_back(102);
vector2.push_back(102);
vector2.push_back(101);
vector2.push_back(100);
if (vector1 == vector2)
std::cout << "same" << std::endl;
else
std::cout << "not same" << std::endl;
if (std::equal(vector1.begin(), vector1.end(), vector2.begin()))
std::cout << "same" << std::endl;
else
std::cout << "not same" << std::endl;
if (compareVectors(vector1, vector2))
std::cout << "same" << std::endl;
else
std::cout << "not same" << std::endl;
выходной сигнал будет:
not same
not same
same
Я думаю, что последняя крошечная информация нуждается в следующем: если вы отсортируете свой вектор, это сработает. попробуйте это: std :: sort (vector.begin(), vector.end()); – AnyOneElse
@AnyOneElse Вы не должны делать это для тестирования равенства векторов, поскольку имеет значение порядок элементов вектора, два вектора с одинаковыми элементами, но в другом порядке, не математически равны. Однако, если вы хотите рассматривать векторное равенство таким образом, чтобы порядок элементов не имел значения, сортировка их перед сравнением является возможным решением. – GBlomqvist