std::filesystem::path:: compare
|
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) |
Сравнивает лексические представления пути и другого пути.
has_root_directory()
равно
false
, и значение больше нуля в противном случае.
relative_path()
) соответственно лексикографически меньше, равна или больше относительной части
p
(
p.
relative_path
(
)
). Сравнение выполняется поэлементно, как если бы происходила итерация по обоим путям от
begin()
до
end()
с сравнением результата
native()
для каждого элемента.
Содержание |
Параметры
| p | - | путь для сравнения |
| str | - | строка или строковое представление пути для сравнения |
| s | - | нуль-терминированная строка, представляющая путь для сравнения |
Возвращаемое значение
Значение меньше 0 если путь лексикографически меньше заданного пути.
Значение, равное 0 если путь лексикографически равен заданному пути.
Значение больше 0 если путь лексикографически больше заданного пути.
Исключения
Примечания
Для двусторонних сравнений бинарные операторы могут быть более подходящими.
Пример
#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)
(до C++20)
(C++17)
(до C++20)
(C++17)
(до C++20)
(C++17)
(до C++20)
(C++17)
(до C++20)
(C++20)
|
лексикографически сравнивает два пути
(функция) |