STL是否首先设置相等运算符检查大小?

Cha*_*nce 3 c++ performance stl comparator

当我使用==或!=运算符来比较两个集合时,该运算符是否实际上比较了两个集合的大小?我想知道我是否需要首先手动比较两种尺寸以使其更有效率,或者如果我实际上要降低其效率.我知道运算符将检查大小的相等和不等式,我只是不知道它是否会首先执行此操作.

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;
}
Run Code Online (Sandbox Code Playgroud)

ild*_*arn 8

是的,这是第一件检查 - 从C++ 11标准,§23.2.1表96(容器要求):

表达:

     a == b(其中,ab表示类型的值XX表示包含类型的对象的容器类T)

操作语义:

   distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&
     equal(a.begin(), a.end(), b.begin())
Run Code Online (Sandbox Code Playgroud)