我想使用equal
算法比较两组,但它给了我一个错误。
如何知道两组是否相等?
if(equal (a.begin(), a.end(), v.begin(), v.end())
答案 0 :(得分:12)
您可以简单地说a == v
,或者。它尽可能高效。 a.size() == v.size() && a == v
(具有显式大小检查的后一种形式可能更好,因为set迭代器不是随机访问。)更新:隐含大小检查[感谢@juanchopanza!]
答案 1 :(得分:5)
你可能会调用std::equal
overload获取3个迭代器和一个额外的谓词。所以只是放弃第二个结尾,因为它不被解释为结束迭代器,而是一个谓词,这是垃圾:
std::equal(a.begin(), a.end(), v.begin())
但是,在这种情况下, Mark 在他的评论中得到了肯定,你必须确保两个容器的大小都事先匹配,否则你冒着跑过第二组结束的风险。请注意,C ++ 14确实会引入一个带有四个迭代器的std::equal
重载(这是你想要的),并且会隐式地执行大小检查,但看起来你的实现还不支持这个。
除此之外,其他答案和评论都是正确的,因为a == v
更简单,更清晰,更简化。