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
(
)
)
非零,则返回该值。
否则,若
has_root_directory
(
)
!
=
p.
has_root_directory
(
)
,则当
has_root_directory()
为
false
时返回小于零的值,否则返回大于零的值。
否则,当路径的相对部分(
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++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| 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)
|
按字典序比较两个路径
(函数) |