Namespaces
Variants

std::filesystem::path:: compare

From cppreference.net
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부터)

경로의 어휘 표현과 다른 경로를 비교합니다.

1) 만약 root_name ( ) . native ( ) . compare ( p. root_name ( ) . native ( ) ) 이 0이 아니면, 해당 값을 반환합니다.
그렇지 않고, has_root_directory ( ) ! = p. has_root_directory ( ) 인 경우, has_root_directory() false 이면 0보다 작은 값을 반환하고, 그렇지 않으면 0보다 큰 값을 반환합니다.
그렇지 않으면 경로의 상대 부분( relative_path() )이 p 의 상대 부분( p. relative_path ( ) )보다 각각 사전 순서로 작거나, 같거나, 큰 경우에 0 보다 작거나, 같거나, 큰 값을 반환합니다. 비교는 요소별로 수행되며, begin() 부터 end() 까지 두 경로를 순회하면서 각 요소의 native() 결과를 비교하는 것과 같습니다.
2) 다음에 해당함 compare ( path ( str ) ) .
3) 다음에 해당함 compare ( path ( s ) ) .

목차

매개변수

p - 비교할 경로
str - 비교할 경로를 나타내는 문자열 또는 문자열 뷰
s - 비교할 경로를 나타내는 널 종료 문자열

반환값

경로가 주어진 경로보다 사전순으로 작을 경우 0 미만의 값입니다.

경로가 주어진 경로와 사전순으로 동일한 경우 0 과 같은 값.

경로가 주어진 경로보다 사전순으로 더 크면 0 보다 큰 값을 반환합니다.

예외

2,3) 구현에서 정의된 예외를 발생시킬 수 있습니다.

참고 사항

양방향 비교의 경우, 이항 연산자 가 더 적합할 수 있습니다.

예제

#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) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++17) (until C++20) (C++20)
두 경로를 사전식으로 비교합니다
(함수)