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

履歴 編集

function
<filesystem>

std::filesystem::path::compare(C++17)

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

処理系