std::filesystem::path:: compare
|
int
compare
(
const
path
&
p
)
const
noexcept
;
|
(1) | (seit C++17) |
|
int
compare
(
const
string_type
&
str
)
const
;
int compare ( std:: basic_string_view < value_type > str ) const ; |
(2) | (seit C++17) |
|
int
compare
(
const
value_type
*
s
)
const
;
|
(3) | (seit C++17) |
Vergleicht die lexikalischen Darstellungen des Pfades und eines anderen Pfades.
has_root_directory()
false
ist, und ein Wert größer als Null andernfalls.
relative_path()
) lexikografisch jeweils kleiner, gleich oder größer als der relative Teil von
p
(
p.
relative_path
(
)
) ist. Der Vergleich wird elementweise durchgeführt, als würde man beide Pfade von
begin()
bis
end()
iterieren und das Ergebnis von
native()
für jedes Element vergleichen.
Inhaltsverzeichnis |
Parameter
| p | - | ein Pfad zum Vergleich |
| str | - | ein String oder String-View, der einen Pfad zum Vergleich darstellt |
| s | - | ein nullterminierter String, der einen Pfad zum Vergleich darstellt |
Rückgabewert
Ein Wert kleiner als 0 wenn der Pfad lexikografisch kleiner als der gegebene Pfad ist.
Ein Wert gleich 0 wenn der Pfad lexikographisch gleich dem gegebenen Pfad ist.
Ein Wert größer als 0 wenn der Pfad lexikografisch größer als der angegebene Pfad ist.
Ausnahmen
Hinweise
Für Zwei-Wege-Vergleiche können binäre Operatoren besser geeignet sein.
Beispiel
#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"); }
Ausgabe:
"/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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 2936 | C++17 | verglich alle Pfadelemente direkt | Root-Name und Root-Verzeichnis separat behandelt |
Siehe auch
|
(C++17)
(C++17)
(bis C++20)
(C++17)
(bis C++20)
(C++17)
(bis C++20)
(C++17)
(bis C++20)
(C++17)
(bis C++20)
(C++20)
|
vergleicht zwei Pfade lexikographisch
(Funktion) |