std::filesystem::path::compare
De cppreference.com
< cpp | filesystem | path
int compare( const path& p ) const noexcept; |
(1) | (desde C++17) |
int compare( const string_type& str ) const; int compare( std::basic_string_view<value_type> str ) const; |
(2) | (desde C++17) |
int compare( const value_type* s ) const; |
(3) | (desde C++17) |
Compara las representaciones léxicas de la ruta de acceso y otra ruta.
1) Si root_name().native().compare(p.root_name().native()) es distinto de cero, devuelve ese valor.
De lo contrario, si has_root_directory() != p.has_root_directory(), devuelve un valor menor que cero si
has_root_directory()
es false y un valor mayor que cero de lo contrario. De lo contrario devuelve un valor menor que, igual a o mayor que 0 si la porción relativa de la ruta de acceso (
relative_path()
) es, respectivamente, lexicográficamente menor que, igual a o mayor que la porción relativa de p
(p.relative_path()). La comparación se ejecuta elemento por elemento, como si se iteraran ambas rutas de acceso desde begin()
hasta end()
y se comparara el resultado de native()
para cada elemento.2) Equivalente a compare(path(str)).
3) Equivalente a compare(path(s)).
Contenido |
[editar] Parámetros
p | - | Una ruta de acceso a comparar. |
str | - | Una cadena o vista sobre cadena que representa la ruta de acceso con la que comparar. |
s | - | Una cadena terminada en nulo que representa la ruta de acceso con la que comparar. |
[editar] Valor de retorno
Un valor menor que 0 si la ruta de acceso es lexicográficamente menor que la ruta de acceso dada.
Un valor igual a 0 si la ruta de acceso es lexicográficamente igual a la ruta de acceso dada.
Un valor mayor que 0 si la ruta de acceso es lexicográficamente mayor que la ruta de acceso dada.
[editar] Excepciones
2-3) Puede lanzar excepciones definidas por la implementación.
[editar] Notas
Para comparaciones de dos vías, los operadores binarios pueden ser más adecuados.
[editar] Ejemplo
Ejecuta este código
#include <iostream> #include <filesystem> #include <string_view> namespace fs = std::filesystem; void demo(fs::path p1, fs::path p2, std::string_view mensaje) { using std::cout; cout << p1; const int rc = p1.compare(p2); if(rc < 0) cout << " < "; else if(rc > 0) cout << " > "; else cout << " == "; cout << p2 << " \t: " << mensaje << '\n'; } int main() { demo("/a/b/", "/a/b/", "simple"); demo("/a/b/", "/a/b/c", "simple"); demo("/a/b/../b", "/a/b", "no hay conversión canónica"); demo("/a/b", "/a/b/.", "no hay conversión canónica"); demo("/a/b/", "a/c", "las rutas absolutas se ordenan después de las relativas"); }
Salida:
"/a/b/" == "/a/b/" : simple "/a/b/" < "/a/b/c" : simple "/a/b/../b" > "/a/b" : no hay conversión canónica "/a/b" < "/a/b/." : no hay conversión canónica "/a/b/" > "a/c" : las rutas absolutas se ordenan después de las relativas
[editar] Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2936 | C++17 | Todos los elementos de la ruta de acceso se comparaban directamente | El nombre raíz y el directorio raíz se manejan separadamente. |
[editar] Véase también
(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(C++20) |
Compara lexicográficamente dos rutas de acceso. (función) |