【问题标题】:Does the STL set equality operator check size first?STL 设置相等运算符是否首先检查大小?
【发布时间】:2012-02-16 18:20:26
【问题描述】:

当我使用 == 或 != 运算符比较两个集合时,该运算符实际上是否首先比较两个集合的大小?我想知道我是否需要先手动比较这两种尺寸以提高效率,或者我是否真的会降低效率。我知道相等和不等运算符会检查大小,我只是不知道它是否会先这样做。

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

【问题讨论】:

  • 不需要。如果它们的大小不同,则它们在逻辑上是不等价的。
  • @MooingDuck,我试图说明不相等的大小是不相等的,我是从效率的角度讲的。 I know the equality and inequality operators will check size, I just don't know if it will do so first.
  • 读者/作者练习:在不使用三元运算符的情况下将您的函数(有或没有大小检查)重写为仅一行。
  • @Chance:别担心。相信实施者,他们往往比你更擅长这些事情。如果它更快,他们可能做到了。

标签: c++ stl comparator performance


【解决方案1】:

是的,这是检查的第一件事——来自 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())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2023-04-07
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多