std::string_view compare() method
- since C++17
// (1) Const version only
constexpr int compare( basic_string_view v ) const noexcept;
// (2) Const version only
constexpr int compare( size_type pos1, size_type count1,
basic_string_view v ) const;
// (3) Const version only
constexpr int compare( size_type pos1, size_type count1, basic_string_view v,
size_type pos2, size_type count2 ) const;
// (4) Const version only
constexpr int compare( const CharT* s ) const;
// (5) Const version only
constexpr int compare( const CharT* s ) const;
constexpr int compare( size_type pos1, size_type count1,
const CharT* s ) const;
// (6) Const version only
constexpr int compare( size_type pos1, size_type count1,
const CharT* s, size_type count2 ) const;
Compares two character sequences.
-
(1) The length
rlenof the sequences to compare isstd::min(size(), v.size()).
The function compares the two views by callingTraits::compare(data(), v.data(), rlen), and returns a value according to the following table:importantThis section requires improvement. You can help by editing this doc page.
-
(2) Equivalent to
substr(pos1, count1).compare(v). -
(3) Equivalent to
substr(pos1, count1).compare(v.substr(pos2, count2)). -
(4) Equivalent to
compare(basic_string_view(s)). -
(5) Equivalent to
substr(pos1, count1).compare(basic_string_view(s)). -
(6) Equivalent to
substr(pos1, count1).compare(basic_string_view(s, count2)).
Parameters
v- view to compares- pointer to the character string to compare tocount1- number of characters of this view to comparepos1- position of the first character in this view to comparecount2- number of characters of the given view to comparepos2- position of the first character of the given view to compare
Returns value
- Negative value if
*thisappears before the character sequence specified by the arguments, in lexicographical order. - Zero if both character sequences compare equivalent.
- Positive value if
*thisappears after the character sequence specified by the arguments, in lexicographical order.
Complexity
This section requires improvement. You can help by editing this doc page.
Exceptions
(none)
Possible implementation
template<class CharT, class Traits, class Alloc>
int basic_string_view<CharT, Traits, Alloc>::compare(std::basic_string_view s) const noexcept
{
size_type lhs_sz = size();
size_type rhs_sz = s.size();
int result = traits_type::compare(data(), s.data(), std::min(lhs_sz, rhs_sz));
if (result != 0)
return result;
if (lhs_sz < rhs_sz)
return -1;
if (lhs_sz > rhs_sz)
return 1;
return 0;
}
Example
#include <string_view>
int main() {
using std::operator""sv;
static_assert( "abc"sv.compare("abcd"sv) < 0 );
static_assert( "abcd"sv.compare("abc"sv) > 0 );
static_assert( "abc"sv.compare("abc"sv) == 0 );
static_assert( ""sv.compare(""sv) == 0 );
}
Hover to see the original license.