当我使用==或!=运算符来比较两个集合时,该运算符是否实际上首先比较了这两个集合的大小?我想知道我是否需要首先手动比较两种尺寸以使其更有效率,或者如果我实际上要降低其效率。我知道运算符将检查大小的相等和不等式,我只是不知道它是否会首先执行此操作。
bool checkEqualTo( const set<int> & set1, const set<int> & set2 )
{
// Should I include comparison of sizes first?
if ( set1.size() != set2.size() )
{
return false;
}
if ( set1 != set2 )
{
return false;
}
return true;
}
答案 0 :(得分:8)
是的,这是第一件检查 - 来自C ++ 11标准,§23.2.1表96(容器要求):
<强>表达式:强>
a == b
(其中a
和b
表示类型X
的值,X
表示包含T
类型对象的容器类操作语义:
distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())