int compare( const basic_string& str ) const;
(1) (noexcept since C++11)int compare( size_type pos1, size_type count1,
const basic_string& str ) const;
const basic_string& str,
const basic_string& str,
int compare( const CharT* s ) const;
(4) (constexpr since C++20)int compare( size_type pos1, size_type count1,
const CharT* s ) const;
int compare( size_type pos1, size_type count1,
const CharT* s, size_type count2 ) const;
template< class StringViewLike >
int compare( const StringViewLike& t ) const noexcept(/* see below */);
int compare( size_type pos1, size_type count1,
int compare( size_type pos1, size_type count1,
const StringViewLike& t,
Compares two character sequences.
1) Compares this string to str.
2)Compares a
[
pos1,
pos1 + count1)
substring of this string to
str.
[
pos1,
size())
.Compares a
[
pos1,
pos1 + count1)
substring of this string to a substring
[
pos2,
pos2 + count2)
of
str.
[
pos1,
size())
.[
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
swith length
Traits::length(s).
[
pos1,
size())
.Compares a
[
pos1,
pos1 + count1)
substring of this string to the characters in the range
[
s,
s + count2)
. The characters in
[
s,
s + count2)
may include null characters.
[
pos1,
size())
.7) compares this string to sv;
8)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);
9)compares a
[
pos1,
pos1 + count1)
substring of this string to a substring
[
pos2,
pos2 + count2)
of
sv, as if by
std::basic_string_view<CharT, Traits>(*this).
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:
Traits::compare(data1, data2, rlen) < 0
data1 is less than data2 <0 Traits::compare(data1, data2, rlen) == 0
size1 < size2 data1 is less than data2 <0 size1 == size2 data1 is equal to data2 â0â size1 > size2 data1 is greater than data2 >0 Traits::compare(data1, data2, rlen) > 0
data1 is greater than data2 >0 [edit] 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 compare t - object (convertible to std::basic_string_view) to compare to [edit] Return value
The overloads taking parameters named pos1 or pos2 throws std::out_of_range if the argument is out of range.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
[edit] Possible implementation overload (1)template<class CharT, class Traits, class Alloc> int std::basic_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; }[edit] 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.
[edit] Example#include <cassert> #include <iomanip> #include <iostream> #include <string> #include <string_view> void print_compare_result(std::string_view str1, std::string_view str2, int compare_result) { if (compare_result < 0) std::cout << std::quoted(str1) << " comes before " << std::quoted(str2) << ".\n"; else if (compare_result > 0) std::cout << std::quoted(str2) << " comes before " << std::quoted(str1) << ".\n"; else std::cout << std::quoted(str1) << " and " << std::quoted(str2) << " are the same.\n"; } int main() { std::string batman{"Batman"}; std::string superman{"Superman"}; int compare_result{0}; // 1) Compare with other string compare_result = batman.compare(superman); std::cout << "1) "; print_compare_result("Batman", "Superman", compare_result); // 2) Compare substring with other string compare_result = batman.compare(3, 3, superman); std::cout << "2) "; print_compare_result("man", "Superman", compare_result); // 3) Compare substring with other substring compare_result = batman.compare(3, 3, superman, 5, 3); std::cout << "3) "; print_compare_result("man", "man", compare_result); // Compare substring with other substring // defaulting to end of other string assert(compare_result == batman.compare(3, 3, superman, 5)); // 4) Compare with char pointer compare_result = batman.compare("Superman"); std::cout << "4) "; print_compare_result("Batman", "Superman", compare_result); // 5) Compare substring with char pointer compare_result = batman.compare(3, 3, "Superman"); std::cout << "5) "; print_compare_result("man", "Superman", compare_result); // 6) Compare substring with char pointer substring compare_result = batman.compare(0, 3, "Superman", 5); std::cout << "6) "; print_compare_result("Bat", "Super", compare_result); }
Output:
1) "Batman" comes before "Superman". 2) "Superman" comes before "man". 3) "man" and "man" are the same. 4) "Batman" comes before "Superman". 5) "Superman" comes before "man". 6) "Bat" comes before "Super".[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior LWG 5 C++98 the parameter count2 of overload (6)RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4