Namespaces
Variants

std::experimental::filesystem::path:: compare

From cppreference.net
int compare ( const path & p ) const noexcept ;
(1) (filesystem TS)
int compare ( const string_type & str ) const ;
(2) (filesystem TS)
int compare ( const value_type * s ) const ;
(3) (filesystem TS)

Сравнивает лексические представления пути и другого пути.

1) Возвращает значение меньше, равное или большее 0 если нативное представление пути ( native ()) лексикографически соответственно меньше, равно или больше нативного представления p ( p. native ( ) ). Сравнение выполняется поэлементно, как при итерации обоих путей от begin () до end ().
2) Эквивалентно compare ( path ( str ) ) .
3) Эквивалентно compare ( path ( s ) ) .

Содержание

Параметры

p - путь для сравнения
str - строка, представляющая путь для сравнения
s - нуль-терминированная строка, представляющая путь для сравнения

Возвращаемое значение

Значение меньше 0 если путь лексикографически меньше заданного пути.

Значение, равное 0 если путь лексикографически равен заданному пути.

Значение больше 0 если путь лексикографически больше заданного пути.

Исключения

2,3) Может генерировать исключения, определяемые реализацией.

Примечания

Для двусторонних сравнений бинарные операторы могут быть более подходящими.

Пример

#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::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/_"

Смотрите также

лексикографически сравнивает два пути
(функция)