| Member types | ||||||
| Member constants | ||||||
| Member functions | ||||||
| Path decomposition | ||||||
| Non-member functions | ||||||
| ||||||
| Helper classes | ||||||
int compare(const path& p)constnoexcept; | (1) | (since C++17) |
int compare(const string_type& str)const; int compare(std::basic_string_view<value_type> str)const; | (2) | (since C++17) |
int compare(const value_type* s)const; | (3) | (since C++17) |
Compares the lexical representations of the path and another path.
has_root_directory() isfalse and a value greater than zero otherwise.relative_path()) is respectively lexicographically less than, equal to or greater than the relative portion ofp (p.relative_path()). Comparison is performed element-wise, as if by iterating both paths frombegin() toend() and comparing the result ofnative() for each element.Contents |
| 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 |
A value less than0 if the path is lexicographically less than the given path.
A value equal to0 if the path is lexicographically equal to the given path.
A value greater than0 if the path is lexicographically greater than the given path.
For two-way comparisons,binary operators may be more suitable.
#include <filesystem>#include <iostream>#include <string_view>namespace fs= std::filesystem; void demo(fs::path p1, fs::path p2,std::string_view msg){std::cout<< p1;constint rc= p1.compare(p2);if(rc<0)std::cout<<" < ";elseif(rc>0)std::cout<<" > ";elsestd::cout<<" == ";std::cout<< p2<<"\t: "<< msg<<'\n';} int main(){ demo("/a/b/","/a/b/","simple"); demo("/a/b/","/a/b/c","simple"); demo("/a/b/../b","/a/b","no canonical conversion"); demo("/a/b","/a/b/.","no canonical conversion"); demo("/a/b/","a/c","absolute paths order after relative ones");}
Output:
"/a/b/" == "/a/b/" : simple"/a/b/" < "/a/b/c": simple"/a/b/../b" > "/a/b": no canonical conversion"/a/b" < "/a/b/.": no canonical conversion"/a/b/" > "a/c" : absolute paths order after relative ones
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 |
(C++17)(C++17)(until C++20)(C++17)(until C++20)(C++17)(until C++20)(C++17)(until C++20)(C++17)(until C++20)(C++20) | lexicographically compares two paths (function)[edit] |