FreeBSD Manual Pages
std::basic_string::compare(3) C++ Standard Libarystd::basic_string::compare(3) NAME std::basic_string::compare - std::basic_string::compare Synopsis int compare( const (until basic_string& C++11) str ) const; int compare( (since const C++11) basic_string& (until str ) const C++20) noexcept; constexpr int compare( const (since basic_string& C++20) str ) const noexcept; int compare( size_type pos1, size_type (until count1, C++20) const basic_string& str ) const; constexpr int compare( size_type pos1, size_type (since count1, C++20) const basic_string& str ) const; int compare( size_type pos1, size_type count1, const (until basic_string& C++14) str, size_type pos2, size_type count2 ) const; int compare( size_type pos1, size_type count1, (since const C++14) basic_string& (until str, C++20) size_type pos2, size_type count2 = npos ) const; constexpr int compare( size_type pos1, size_type count1, const (since basic_string& C++20) str, size_type pos2, size_type count2 = npos ) const; int compare( (until const CharT* s C++20) ) const; constexpr int compare( const (since CharT* s ) C++20) const; int compare( size_type pos1, size_type (until count1, C++20) const CharT* s ) const; constexpr int compare( size_type pos1, (since size_type C++20) count1, const CharT* s ) const; int compare( size_type pos1, size_type (until count1, C++20) const CharT* s, (1) size_type count2 ) const; constexpr int compare( size_type pos1, size_type (since count1, (2) C++20) const CharT* s, size_type count2 ) const; template < class StringViewLike > (3) (since int compare( C++17) const (until StringViewLike& C++20) t ) const noexcept(/* see below */); template < class StringViewLike > constexpr int (since compare( const C++20) StringViewLike& t ) const noexcept(/* see below */); template < class StringViewLike > (4) (since int compare( C++17) size_type pos1, (5) (until size_type C++20) count1, const StringViewLike& t ) const; template < (6) class StringViewLike > constexpr int compare( (since size_type pos1, (7) C++20) size_type count1, const StringViewLike& t ) const; template < class StringViewLike > (8) int compare( size_type pos1, (since size_type C++17) count1, (until const C++20) StringViewLike& t, size_type pos2, size_type count2 = npos) const; template < (9) class StringViewLike > constexpr int compare( size_type pos1, size_type (since count1, C++20) const StringViewLike& t, size_type pos2, size_type count2 = npos) const; Compares two character sequences. 1) Compares this string to str. 2) Compares a [pos1, pos1+count1) substring of this string to str. If count1 > size() - pos1 the substring is [pos1, size()). 3) Compares a [pos1, pos1+count1) substring of this string to a sub- string [pos2, pos2+count2) of str. If count1 > size() - pos1 the first substring is [pos1, size()). Likewise, count2 > str.size() - pos2 the second substring is [pos2, str.size()). 4) Compares this string to the null-terminated character sequence beginning at the character pointed to by s with length Traits::length(s). 5) Compares a [pos1, pos1+count1) substring of this string to the null-terminated character sequence beginning at the character pointed to by s with length Traits::length(s). If count1 > size() - pos1 the substring is [pos1, size()). 6) Compares a [pos1, pos1+count1) substring of this string to the characters in the range [s, s + count2). If count1 > size() - pos1 the substring is [pos1, size()). (Note: the characters in the range [s, s + count2) may include null characters.) 7) Implicitly converts t to a string view sv as if by std::ba- sic_string_view<CharT, Traits> sv = t;, then compares this string to sv. This overload par- ticipates in overload resolution only if std::is_convertible_v<const StringView- Like&, std::basic_string_view<CharT, Traits>> is true and std::is_convert- ible_v<const StringViewLike&, const CharT*> is false. 8) Implicitly converts t to a string view sv as if by std::ba- sic_string_view<CharT, Traits> sv = t;, then compares a [pos1, pos1+count1) substring of this string to sv, as if by std::basic_string_view<CharT, Traits>(*this).substr(pos1, count1).compare(sv). This overload participates in overload resolu- tion only if std::is_convertible_v<const StringViewLike&, std::ba- sic_string_view<CharT, Traits>> is true and std::is_convertible_v<const StringViewLike&, const CharT*> is false. 9) Implicitly converts t to a string view sv as if by std::ba- sic_string_view<CharT, Traits> sv = t;, then compares a [pos1, pos1+count1) substring of this string to a substring [pos2, pos2+count2) of sv as if by std::ba- sic_string_view<CharT, Traits>(*this).substr(pos1, count1).compare(sv.substr(pos2, count2)). This overload participates in overload resolution only if std::is_convert- ible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>> is true and std::is_convertible_v<const StringViewLike&, const CharT*> is false. A character sequence consisting of count1 characters starting at data1 is compared to a character sequence consisting of count2 characters starting at data2 as follows. First, calculate the number of characters to compare, as if by size_type rlen = std::min(count1, count2). Then compare the sequences by call- ing Traits::compare(data1, data2, rlen). For standard strings this func- tion performs character-by-character lexicographical comparison. If the result is zero (the character sequences are equal so far), then their sizes are compared as follows: Condition Result Return value Traits::compare(data1, data2, rlen) < 0 data1 is less than <0 data2 size1 < size2 data1 is less than <0 data2 Traits::compare(data1, data2, rlen) == size1 == data1 is equal to 0 0 size2 data2 size1 > size2 data1 is greater >0 than data2 Traits::compare(data1, data2, rlen) > 0 data1 is greater >0 than data2 Parameters str - other string to compare to s - pointer to the character string to compare to count1 - number of characters of this string to compare pos1 - position of the first character in this string to compare count2 - number of characters of the given string to compare pos2 - position of the first character of the given string to com- pare t - object (convertible to std::basic_string_view) to compare to Return value negative value if *this appears before the character sequence speci- fied by the arguments, in lexicographical order zero if both character sequences compare equivalent positive value if *this appears after the character sequence speci- fied by the arguments, in lexicographical order Exceptions The overloads taking parameters named pos1 or pos2 throws std::out_of_range if the argument is out of range. 7) noexcept specification: noexcept(std::is_nothrow_convertible_v<const T&, std::ba- sic_string_view<CharT, Traits>>) 8-9) Throws anything thrown by the conversion to basic_string_view. Possible implementation template<class CharT, class Traits, class Alloc> int ba- sic_string<CharT, Traits, Alloc>::compare(const std::basic_string& 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; } Notes For the situations when three-way comparison is not required, std::basic_string provides the usual relational operators (<, <=, ==, >, etc). By default (with the default std::char_traits), this function is not locale-sensitive. See std::collate::compare for locale-aware three- way string comparison. Example // Run this code #include <cassert> #include <string> #include <iostream> int main() { // 1) Compare with other string { int compare_value{ std::string{"Batman"}.compare(std::string{"Superman"}) }; std::cout << ( compare_value < 0 ? "Batman comes before Superman\n" : compare_value > 0 ? "Superman comes before Batman\n" : "Superman and Batman are the same.\n" ); } // 2) Compare substring with other string { int compare_value{ std::string{"Batman"}.compare(3, 3, std::string{"Super- man"}) }; std::cout << ( compare_value < 0 ? "man comes before Superman\n" : compare_value > 0 ? "Superman comes before man\n" : "man and Superman are the same.\n" ); } // 3) Compare substring with other substring { std::string a{"Batman"}; std::string b{"Superman"}; int compare_value{a.compare(3, 3, b, 5, 3)}; std::cout << ( compare_value < 0 ? "man comes before man\n" : compare_value > 0 ? "man comes before man\n" : "man and man are the same.\n" ); // Compare substring with other substring // defaulting to end of other string assert(compare_value == a.compare(3, 3, b, 5)); } // 4) Compare with char pointer { int compare_value{std::string{"Batman"}.compare("Superman")}; std::cout << ( compare_value < 0 ? "Batman comes before Superman\n" : compare_value > 0 ? "Superman comes before Batman\n" : "Superman and Batman are the same.\n" ); } // 5) Compare substring with char pointer { int compare_value{std::string{"Batman"}.compare(3, 3, "Super- man")}; std::cout << ( compare_value < 0 ? "man comes before Superman\n" : compare_value > 0 ? "Superman comes before man\n" : "man and Superman are the same.\n" ); } // 6) Compare substring with char pointer substring { int compare_value{std::string{"Batman"}.compare(0, 3, "Super- man", 5)}; std::cout << ( compare_value < 0 ? "Bat comes before Super\n" : compare_value > 0 ? "Super comes before Bat\n" : "Super and Bat are the same.\n" ); } } Output: Batman comes before Superman Superman comes before man man and man are the same. Batman comes before Superman Superman comes before man Bat comes before Super Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 2946 C++17 string_view overload causes ambiguity in avoided by making it a some cases tem- plate P1148R0 C++17 noexcept for overload (7) was accidently re- stored dropped by LWG2946 See also operator== operator!= operator< operator> operator<= operator>= lexicographically compares two strings operator<=> (function template) (removed in C++20) (removed in C++20) (removed in C++20) (removed in C++20) (removed in C++20) (C++20) substr returns a substring (public member function) collate defines lexicographical comparison and hash- ing of strings (class template) strcoll compares two strings in accordance to the current locale (function) returns true if one range is lexicographi- cally less than lexicographical_compare another (function template) compare compares two views (C++17) (public member function of std::basic_string_view<CharT,Traits>) http://cppreference.com 2022.07.31 std::basic_string::compare(3)
NAME | Synopsis | Parameters | Return value | Exceptions | Possible implementation | Notes | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::u16string::compare&sektion=3&manpath=FreeBSD+Ports+15.0>
