STL сначала устанавливает оператор равенства для проверки размера? - PullRequest
3 голосов
/ 16 февраля 2012

Когда я использую оператор == или! = Для сравнения двух наборов, действительно ли этот оператор сначала сравнивает размер этих двух наборов?Мне интересно, нужно ли мне сначала сравнить эти два размера вручную, чтобы сделать его более эффективным, или я бы на самом деле сделал его менее эффективным.Я знаю, что операторы равенства и неравенства будут проверять размер, я просто не знаю, будет ли это сначала.

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 Ответ

8 голосов
/ 16 февраля 2012

Да, это первое, что проверено & mdash; из стандарта 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())
...