Почему std :: vector <bool>не специализирует функцию лексикографического сравнения? - PullRequest
1 голос
/ 12 июня 2019

Я знаю, что std::vector<bool> - это экономичная специализация std::vector для типа bool.Я смотрю реализацию clang и gcc и обнаруживаю, что они используют базовый тип хранения unsigned long для одновременного хранения 64 элементов bool, но почему они не специализировали функцию сравнения, такую ​​как operator<()?

Как вы видите в следующем коде, они просто используют std :: lexicographic_compare для сравнения двух векторов, это так неэффективно:

template <class Allocator>
bool operator< (const vector<bool, Allocator>& x, const vector<bool, 
Allocator>& y)
{
    return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
}

Если вы используете базовый тип хранения unsigned long для хранения 64 элементов bool, выможет в соответствии с порядком действия базовой машины упорядочить биты и сравнить сразу 64 элемента bool.почему они этого не сделали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...