Строка == operator
основана на методе compare()
. Глядя на реализацию, доступную на моем TDMG * 1012 *, я обнаружил следующее:
// This is the overloaded one called when you compare to argv[1]
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::
compare(const _CharT* __s) const
{
__glibcxx_requires_string(__s);
const size_type __size = this->size();
const size_type __osize = traits_type::length(__s);
const size_type __len = std::min(__size, __osize);
int __r = traits_type::compare(_M_data(), __s, __len);
if (!__r)
__r = _S_compare(__size, __osize);
return __r;
}
Как вы можете видеть, перед сравнением длин, которые он сначала вызывает, это traits_type::compare()
, что в основном является memcmp()
:
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{ return __builtin_memcmp(__s1, __s2, __n); }
Поэтому, если я не ошибаюсь, сравнение будет линейным временем, как вы упомянули.