gpt4 book ai didi

c++ - 删除 vector 中的重复文件名

转载 作者:行者123 更新时间:2023-11-28 02:04:47 25 4
gpt4 key购买 nike

我有一个程序接收文件列表的输入,这些文件保存在 std::vector 中:

std::vector<std::string> fileNames;

用户可以完全自由地输入任何文件名(它们取自 argv),如果输入的文件名指向同一文件,程序应该忽略重复项。问题是用户甚至可以使 vector 具有这样的内容:

{
"myfile1.txt",
"/path/to/myfile1.txt",
"/path//to/myfile1.txt"
}

考虑到我是从 /path/to 调用程序,这三个文件名指的是同一个文件,但它们是不同的字符串。

我必须用 fopen() 打开它们(std::ifstream)。

并在启动进程之前检查所有程序 fopen() 的所有文件,所以这不是问题。

有没有一种有效的方法来删除重复的文件名?

最佳答案

您可以使用 std::set 而不是 vector 来确保相同的字符串只列出一次。

或者,您可以std::sort(或std::stable_sort) vector ,然后使用std::unique 结合std::erase 删除重复项。

至于引用同一个文件的不相同的字符串;在 Linux 上,您可以使用 realpath(3) 在将所有路径添加到 vector (或集合)之前规范化所有路径。我不知道 Windows 上的等效功能,但我确定有一个。如果您还需要它在 Windows 上工作,也许可以尝试通过 msdn.com 进行搜索。

关于c++ - 删除 vector 中的重复文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951673/

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