按字母顺序对两对“std::p air<fs::p ath, fs::p ath>”排序

sort two pair `std::pair<fs::path, fs::path>` in alphabetical order

提问人:desmond13 提问时间:2/7/2022 最后编辑:desmond13 更新时间:2/7/2022 访问量:91

问:

我对C++相当陌生,我有两个文件夹,文件数量相同。我想按字母顺序对两个文件夹进行排序,然后打印filneame对:

[folder_1/file1.txt, folder_2/different_file4.txt] 
[folder_1/file2.txt, folder_2/different_file9.txt] 
[folder_1/file3.txt, folder_2/different_file35.txt] 
...

这是我到目前为止编写的代码:

int main (int argc, char **argv)
{ 
    cout << "C++ version: " << __cplusplus << "\n"; 
    
    const fs::path path_1{ "/home/path_to_folder1" };
    const fs::path path_2{ "/home/path_to_folder2" };
    std::vector<std::pair<fs::path, fs::path>> v{};
    std::transform(fs::recursive_directory_iterator{ path_1 }, {}, fs::recursive_directory_iterator{ path_2 }, std::back_inserter(v), [](auto& entry1, auto& entry2) {         
        return std::pair<fs::path, fs::path>{ entry1.path(), entry2.path() };
    }
    );
    // TODO: I need to sort, since directory iteration is not ordered on some file systems
    cout << "\n" ; 
    std:sort(v.begin(), v.end(), [](auto &left, auto &right) {
    return left < right; // probably not needed for what I want (i.e., filenames sorted in alphabetical order) 
    cout << (left < right); // debug
    });
    for (auto& p : v)
    {
        std::cout << '[' << p.first << ", " << p.second << "]\n";
    }
}

我知道我需要使用该功能,但我似乎无法让它工作。std::sort

编辑:

预期输出:

["/home/datasets/folder_1/file1.txt", "/home/datasets/folder_2/file432.txt"]
["/home/datasets/folder_1/file2.txt", "/home/datasets/folder_2/file456.txt"]
["/home/datasets/folder_1/file3.txt", "/home/datasets/folder_2/file556.txt"]

实际输出:

["/home/datasets/folder_1/file1.txt", "/home/datasets/folder_2/file556.txt"]
["/home/datasets/folder_1/file2.txt", "/home/datasets/folder_2/file432.txt"]
["/home/datasets/folder_1/file3.txt", "/home/datasets/folder_2/file456.txt"]
C++ 排序 std

评论

5赞 463035818_is_not_an_ai 2/7/2022
您发布的代码有什么问题?如果有一个(我不知道),那么也有一个fs::pathoperator<std::pair
3赞 463035818_is_not_an_ai 2/7/2022
请在问题中包括实际产出和预期产出
2赞 WhozCraig 2/7/2022
您是否了解您的“不正确”排序实际上是针对对的处理方式正确排序的?它们按 排序,只有在等价的情况下,它们才按 排序。这来自文件系统,因此很可能是唯一的,因此不会有等价物将比较发送到 s。记住这一点,再看看你的实际输出。它清楚地按正确排序。firstsecondfirstsecondfirst
3赞 Some programmer dude 2/7/2022
你看过未排序的数据吗?例如 未排序数据中的实际对?通过@molbdnilo扩展注释,我认为您想要的是从路径创建两个向量,分别对每个向量进行排序,然后将两个向量转换为您期望的单个排序向量。["/home/datasets/folder_1/file1.txt", "/home/datasets/folder_2/file432.txt"]
3赞 WhozCraig 2/7/2022
好吧,现在我很想知道。假设您按照规定修复此问题,并实际将每个目录迭代拉入单独的向量中,对它们进行排序,然后将它们合并为 1-1 对的向量,那么如果第二个目录的元素比第一个目录,您对转换调用中会发生什么的假设是什么?我问是因为如果是这样的话,结局不会很好。

答: 暂无答案