gpt4 book ai didi

c++ - 排序相对路径

转载 作者:行者123 更新时间:2023-11-30 03:32:28 25 4
gpt4 key购买 nike

我的问题很简单,但我想不出一个优雅的解决方案。
在我的应用程序中,从用户输入中收集了一堆相对路径(它们实际上并不存在于文件系统中)。
例如:

  • somefile.ext
  • z/file.ext
  • A/B/file2.ext
  • A/B/z/file.ext
  • 文件1.ext
  • A/B/file.ext

这些都聚集在一个 QList 中(它包含指向一个类的实例的指针,这些实例具有作为 QString 成员的路径),但容器对我来说并不重要。
期望的结果是以有序的形式列出列表,文件上的目录(正如我们从大多数文件管理器中使用的那样),基本上就像您将构建一个真实的文件系统一样。

  • A/B/z/file.ext
  • A/B/file.ext
  • A/B/file2.ext
  • z/file.ext
  • 文件.ext
  • somefile.ext

显然,基于普通字符串的排序是行不通的,但是像这样对列表进行排序的最优雅/最简单的方法是什么?

最佳答案

我会写一个自定义 comparator内置排序功能。这样的事情可能会起作用:

auto cmp = [](const string& lhs, const string& rhs) {
int len = min(lhs.size(), rhs.size());
for (int i = 0; i < len; i++) {
if (lhs[i] = rhs[i]) continue;

// check if there is a '/' starting from position i in both paths
// put directory first (if only one is a directory)
// or return lhs[i] < rhs[i]
};

完成这段代码应该相当容易,然后

sort(begin(paths), end(paths), cmp);

请注意,我使用的是 c++11

关于c++ - 排序相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com