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

时间:2012-02-16 18:20:27

标签: c++ stl comparator performance

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

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;
}

1 个答案:

答案 0 :(得分:8)

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

  

<强>表达式:

     

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

     

操作语义:

   distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&
     equal(a.begin(), a.end(), b.begin())