Namespaces
Variants

std::filesystem::path:: compare

From cppreference.net
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以降)

パスの字句表現と別のパスの字句表現を比較します。

1) root_name ( ) . native ( ) . compare ( p. root_name ( ) . native ( ) ) が非ゼロの場合、その値を返します。
それ以外の場合、 has_root_directory ( ) ! = p. has_root_directory ( ) の場合、 has_root_directory() false のときはゼロより小さい値を返し、それ以外の場合はゼロより大きい値を返す。
それ以外の場合、パスの相対部分( relative_path() )が、それぞれ辞書順で p の相対部分( p. relative_path ( ) )より小さい、等しい、または大きい場合に、それぞれ 0 より小さい、等しい、または大きい値を返します。比較は要素ごとに、 begin() から end() まで両方のパスを反復処理し、各要素の native() の結果を比較するかのように実行されます。
2) 次と同等: compare ( path ( str ) )
3) compare ( path ( s ) ) と等価。

目次

パラメータ

p - 比較対象のパス
str - 比較対象のパスを表す文字列または文字列ビュー
s - 比較対象のパスを表すヌル終端文字列

戻り値

パスが指定されたパスよりも辞書順で小さい場合、 0 より小さい値。

指定されたパスと辞書順で等しい場合、 0 に等しい値。

指定されたパスよりも辞書順で大きい場合、 0 より大きい値。

例外

2,3) 実装定義の例外をスローする可能性があります。

注記

双方向比較の場合、 二項演算子 の方がより適切かもしれません。

#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;
    const int rc = p1.compare(p2); 
    if (rc < 0)
        std::cout << " < ";
    else if (rc > 0)
        std::cout << " > ";
    else
        std::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");
}

出力:

"/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

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2936 C++17 すべてのパス要素を直接比較していた ルート名とルートディレクトリを個別に処理

関連項目

(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)
2つのパスを辞書順で比較する
(関数)