std::filesystem::path::compare

< cpp‎ | filesystem‎ | path
 
 
 
 
int compare( const path& p ) const noexcept;
(1) (C++17 起)
int compare( const string_type& str ) const;
int compare( std::basic_string_view<value_type> str ) const;
(2) (C++17 起)
int compare( const value_type* s ) const;
(3) (C++17 起)

比较 path 与另一 path 的字典表示。

1) 若 path 的原生表示( native() )以字典序小于、等于或大于 p 的原生表示( p.native() ),则分别返回小于、等于或大于 0 的值。逐元素进行比较,如同通过在二个 path 上从 begin() 迭代到 end() 。
2) 等价于 compare(path(str))
3) 等价于 compare(path(s))

参数

p - 要比较的 path
str - 表示要比较的表示路径的字符串或字符串视图
s - 表示要比较的路径的空终止字符串

返回值

若 path 的字典序小于给定 path 则为小于 0 的值。

若 path 的字典序等于给定 path 则为等于 0 的值。

若 path 的字典序大于给定 path 则为大于 0 的值。

异常

2-3) (无)

注意

对于双路比较,二元运算符可能更适合。

示例

#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/"; // 对于字典迭代如同 "a/b/."
    fs::path p2 = "/a/b/#";
    demo(p1.compare(p2), p1, p2);
    demo(p1.compare("a/b/_"), p1, "a/b/_");
}

输出:

"/a/b/" > "/a/b/#"
"/a/b/" < "a/b/_"

参阅

(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
以字典序比较二个路径
(函数)