std::filesystem::path::compare (3) - Linux Manuals
std::filesystem::path::compare: std::filesystem::path::compare
Command to display std::filesystem::path::compare
manual in Linux: $ man 3 std::filesystem::path::compare
NAME
std::filesystem::path::compare - std::filesystem::path::compare
Synopsis
int compare( const path& p ) const noexcept; (1) (since C++17)
int compare( const string_type& str ) const; (2) (since C++17)
int compare( std::basic_string_view<value_type> str ) const;
int compare( const value_type* s ) const; (3) (since C++17)
Compares the lexical representations of the path and another path.
1) If root_name().native().compare(p.root_name().native()) is nonzero, returns that value.
Otherwise, if has_root_directory() != p.has_root_directory(), returns a value less than zero if has_root_directory() is false and a value greater than zero otherwise.
Otherwise returns a value less than, equal to or greater than 0 if the relative portion of the path (relative_path()) is respectively lexicographically less than, equal to or greater than the relative portion of p (p.relative_path()). Comparison is performed element-wise, as if by iterating both paths from begin() to end() and comparing the result of native() for each element.
2) Equivalent to compare(path(str)).
3) Equivalent to compare(path(s)).
Parameters
p - a path to compare to
str - a string or string view representing path to compare to
s - a null-terminated string representing path to compare to
Return value
A value less than 0 if the path is lexicographically less than the given path.
A value equal to 0 if the path is lexicographically equal to the given path.
A value greater than 0 if the path is lexicographically greater than the given path.
Exceptions
2-3) (none)
Notes
For two-way comparisons, binary_operators may be more suitable.
Example
// Run this code
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
void demo(int rc, fs::path p1, fs::path p2) {
if(rc < 0) std::cout << p1 << " < " << p2 << '\n';
else if(rc > 0) std::cout << p1 << " > " << p2 << '\n';
else if(rc == 0) std::cout << p1 << "==" << p2 << '\n';
}
int main() {
fs::path p1 = "/a/b/"; // as if "a/b/." for lexicographical iteration
fs::path p2 = "/a/b/#";
demo(p1.compare(p2), p1, p2);
demo(p1.compare("a/b/_"), p1, "a/b/_");
}
Output:
"/a/b/" > "/a/b/#"
"/a/b/" < "a/b/_"
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_2936 C++17 compared all path elements directly root name and root directory handled separately
See also
operator==
operator!= lexicographically compares two paths
operator< (function)
operator<=
operator>
operator>=
Pages related to std::filesystem::path::compare
- std::filesystem::path::concat,std::filesystem::path::operator+= (3) - std::filesystem::path::concat,std::filesystem::path::operator+=
- std::filesystem::path::c_str,std::filesystem::path::native, (3) - std::filesystem::path::c_str,std::filesystem::path::native,
- std::filesystem::path::c_str,std::filesystem::path::native,std::filesystem::path::operatorstring_type() (3) - std::filesystem::path::c_str,std::filesystem::path::native,std::filesystem::path::operatorstring_type()
- std::filesystem::path::clear (3) - std::filesystem::path::clear
- std::filesystem::path::assign (3) - std::filesystem::path::assign
- std::filesystem::path::begin,std::filesystem::path::end (3) - std::filesystem::path::begin,std::filesystem::path::end
- std::filesystem::path::empty (3) - std::filesystem::path::empty
- std::filesystem::path::extension (3) - std::filesystem::path::extension
- std::filesystem::path::filename (3) - std::filesystem::path::filename
- std::filesystem::path::format (3) - std::filesystem::path::format
- std::filesystem::path::generic_string,std::filesystem::path::generic_wstring, (3) - std::filesystem::path::generic_string,std::filesystem::path::generic_wstring,
- std::filesystem::path::has_root_path,std::filesystem::path::has_root_name, (3) - std::filesystem::path::has_root_path,std::filesystem::path::has_root_name,
- std::filesystem::path::is_absolute,is_relative (3) - std::filesystem::path::is_absolute,is_relative
- std::filesystem::path::lexically_normal,std::filesystem::path::lexically_relative, (3) - std::filesystem::path::lexically_normal,std::filesystem::path::lexically_relative,
- std::filesystem::path::lexically_normal,std::filesystem::path::lexically_relative,std::filesystem::path::lexically_proximate (3) - std::filesystem::path::lexically_normal,std::filesystem::path::lexically_relative,std::filesystem::path::lexically_proximate
- std::filesystem::path::make_preferred (3) - std::filesystem::path::make_preferred
- std::filesystem::path::operator= (3) - std::filesystem::path::operator=
- std::filesystem::path::parent_path (3) - std::filesystem::path::parent_path
- std::filesystem::path::path (3) - std::filesystem::path::path
- std::filesystem::path::relative_path (3) - std::filesystem::path::relative_path
- std::filesystem::path::remove_filename (3) - std::filesystem::path::remove_filename
- std::filesystem::path::replace_extension (3) - std::filesystem::path::replace_extension
- std::filesystem::path::replace_filename (3) - std::filesystem::path::replace_filename
- std::filesystem::path::root_directory (3) - std::filesystem::path::root_directory
- std::filesystem::path::root_name (3) - std::filesystem::path::root_name
- std::filesystem::path::root_path (3) - std::filesystem::path::root_path
- std::filesystem::path::stem (3) - std::filesystem::path::stem