【发布时间】:2021-05-23 21:04:03
【问题描述】:
我有以下程序:
std::vector<int> nums = {1, 2, 3, 4, 5};
std::vector<int> nums2 = {5, 4, 3, 2, 1};
bool equal = std::equal(nums.begin(), nums.end(), nums2.begin());
if (equal)
{
cout << "Both vectors are equal" << endl;
}
有两个元素相等的向量。 std::equal 函数在这里不起作用,因为它按顺序执行并比较相应的元素。有没有一种方法可以检查这两个向量是否相等并且在我的情况下是否为真而无需排序?在实际示例中,我没有整数,而是自定义对象,它们比较为指针的相等性。
【问题讨论】:
-
要么对向量进行排序,要么使用
std::unordered_set- 这些是选项吗? -
是的,这可以工作,谢谢,但也许有一些 stl 算法?
-
如果有重复的元素,你会寻求什么结果。例如,根据您的标准,
{1,2,3,4,4}是否与{4,3,2,1}比较? -
感谢大家,真的很有帮助。实际上算法 is_permutation() 正是我正在寻找的。就我而言,性能并不重要。