Я знаю, что 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.почему они этого не сделали?