如何在c ++中有效地比较集合?

时间:2013-06-07 18:49:21

标签: c++ c++11

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

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

2 个答案:

答案 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更简单,更清晰,更简化。