繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM