• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <filesystem>

    std::filesystem::path::compare

    int compare(const path& p) const noexcept;          // (1)
    int compare(const string_type& s) const;            // (2)
    int compare(basic_string_view<value_type> s) const; // (3)
    int compare(const value_type* s) const;             // (4)
    

    概要

    他のパスと、パスの各要素を辞書順で比較する。

    戻り値

    • (1) : this->native()ベースのパスにおける範囲[begin(), end())の各パス要素とp.native()ベースのパスにおける範囲[p.begin(), p.end())の各パス要素を辞書順比較し、*thisの方が小さければ0未満の値、*thisの方が大きければ0より大きい値、等しければ0を返す
    • (2), (3), (4) : compare(path(s))を返す

    #include <cassert>
    #include <iostream>
    #include <filesystem>
    
    namespace fs = std::filesystem;
    
    int main()
    {
      fs::path a = "a/b/c";
      fs::path b = "a/b/d";
    
      std::cout << a.compare(b) << std::endl;
      std::cout << b.compare(a) << std::endl;
      std::cout << a.compare(a) << std::endl;
    
      // 正規化は考慮されない。
      // ファイルシステムとしてのパスの等価性ではなく、
      // パス文字列の同値性が比較されれる
      fs::path c = "a/../b/c";
      assert(a.compare(c) != 0);
    
      // パス範囲同士の各要素を比較するので、複数のスラッシュを入れても影響がない
      assert(fs::path{"a/////b"}.compare(fs::path{"a/b"}) == 0);
    }
    

    出力例

    -3
    3
    0
    

    バージョン

    言語

    • C++17

    処理系