6

我想使用该算法比较两组,equal但它给了我一个错误。如何知道两个集合是否相等?

if(equal (a.begin(), a.end(), v.begin(), v.end())
4

2 回答 2

12

你可以简单地说a == v也许a.size() == v.size() && a == v. 它尽可能高效。(带有显式大小检查的后一种形式可能更好,因为集合迭代器不是随机访问的。)更新:尺寸检查是隐含的[感谢@juanchopanza!]

于 2013-06-07T18:50:07.037 回答
5

您可能会调用采用 3 个迭代器和一个附加谓词的std::equal重载。因此,请忽略第二个结尾,因为它不会被解释为结尾迭代器,而是一个谓词,这是垃圾:

std::equal(a.begin(), a.end(), v.begin())

但是正如Mark在他的评论中在这种情况下所修改的那样,您必须事先确保两个容器的尺寸匹配,否则您将面临跑过第二组结束的风险。请注意,C++14 确实会引入std::equal采用四个迭代器的重载(这是您的意图),并且会隐式执行大小检查,但您的实现似乎还不支持这一点。

除此之外,其他答案和评论都是正确的,因为a == v它更简单、更清晰、更精简。

于 2013-06-07T21:18:05.993 回答