std::filesystem::path:: compare
From cppreference.net
<
cpp
|
filesystem
|
path
|
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)
|
두 경로를 사전식으로 비교합니다
(함수) |