3

所以 std::map 想要排序键类型,但我遇到了问题:

"a/b" < "a/c" < "a//b" 但 fs::equivalent("a/b", "a//b")

"a/b" < "a/c" < "a\b" 但 fs::equivalent("a/b", "a\b")

我如何规范化足以创建排序的路径?这甚至可能吗?我尝试在自定义比较运算符中使用 path::generic_string() ,但它不起作用。fs::equivalent() 也无济于事,因为实现相等性对于 std::map 是不够的,它需要排序。这也是为什么这个问题不是如何使用 boost::filesystem “规范化”路径名的重复问题的原因?.

上下文:仅限 Windows,Boost 1.49,文件系统 3。

4

1 回答 1

2

为了使路径具有可比性,您需要将它们转换为规范表示,然后通过字符串进行比较。规范路径是绝对的、规范化的并且已删除符号链接。Boost 提供规范的 AFAIK。因为需要解析符号链接,所以调用规范需要访问文件系统。

于 2012-12-07T13:16:57.370 回答