gpt4 book ai didi

c++ - 具有两个键值的映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:41 25 4
gpt4 key购买 nike

我有一项作业需要检查文件夹中的所有文件。对于每个文件,我需要知道每个唯一的文件扩展名、每个唯一的文件扩展名有多少个文件,以及每个唯一的文件扩展名的总大小。我必须能够使用文件扩展名或文件扩展名的总大小对此进行排序。我首先想到的是 map 。这将跟踪每个唯一的文件扩展名和找到该文件扩展名的次数。我现在如何将文件扩展名的总大小关联到我的 map ?所以例如我需要输出是这样的:

使用文件扩展名进行排序.cpp:1:3400.exe:3:3455600.mp4 : 25 : 200000404

使用总文件扩展名大小进行排序.mp4:25:200000404.exe:3:3455600.cpp : 1 : 3400

这是经过一些编辑后的代码:

    #include <iostream>
#include <filesystem>
#include <map>

using namespace std;
using namespace std::tr2::sys;

class fileInfo {
public:
int fileCount;
long long fileSize;
};

void scan(path f)
{
map<string, fileInfo> fileMap;
cout << "Scanning = " << system_complete(f) << endl;
directory_iterator d(f);
directory_iterator e;
for( ; d != e; ++d)
{
path p = d->path();
cout << "\nExtension is: " << extension(p) << "\tFile size is: " << file_size(p) << endl;
fileMap[extension(p)].fileCount ++;
fileMap[extension(p)].fileSize += file_size(p);
}

for (map<string, fileInfo>::iterator it = fileMap.begin(); it != fileMap.end(); ++it)
{
cout << it->first << " : " << it->second.fileCount << " : " << it->second.fileSize << endl;
}
}

int main(int argc, char* argv[] )
{
path folder = "..";

scan(folder);

return 0;
}

编辑:所以我已经实现了类 fileInfo。这是一种工作。但我对 file_size 有疑问。在循环的第一次运行后,它正确地返回 file_size,但对于循环的其他每一次运行,file_size 都返回 0。

最佳答案

您可以创建一张 map :

 map<string, vector<int> > fileExtToSizeMap;

基本上,对于 string 中的每个文件扩展名格式,如果当前文件与该扩展名相关联,则将文件的大小放入 vector vector<int> .完成目录扫描后,该 vector 的大小将告诉您 how many files are associated with the file extension vector 的总和会告诉你 the total size for each unique file extension .然后这个数据结构回答了你的两个主要问题。

关于c++ - 具有两个键值的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714859/

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