[英]How to efficiently compare Sets in c++?
我想使用equal
算法比较两组,但它给了我一个错误。 怎么知道两套是否相等?
if(equal (a.begin(), a.end(), v.begin(), v.end())
你可以简单地说a == v
, 或者也许 。 它尽可能高效。 a.size() == v.size() && a == v
(具有显式大小检查的后一种形式可能更好,因为set迭代器不是随机访问。) 更新:隐含尺寸检查[感谢@juanchopanza!]
您可能正在调用std::equal
重载,需要3个迭代器和一个额外的谓词。 所以只是放弃第二个结束,因为它不被解释为结束迭代器,而是一个谓词,这是垃圾:
std::equal(a.begin(), a.end(), v.begin())
但是,正如马克在他的评论中所说的那样,你必须确保两个容器的大小都事先匹配,否则你就有可能跑到第二组的末尾。 请注意,C ++ 14确实会引入一个带有四个迭代器的std::equal
重载(这是你想要的),并且会隐式地执行大小检查,但是你的实现似乎还不支持它。
除此之外,其他答案和评论是正确的,因为a == v
更简单,更清晰,更简化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.