gpt4 book ai didi

c++ - 计算 map 中的出现次数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:36 26 4
gpt4 key购买 nike

目前正在编写一个程序来解析目录(使用 boost 库)并将文件扩展名、特定类型文件的数量和文件大小添加到包含字符串和作为类的键的映射中.我现在正在尝试查找每个文件扩展名的总出现次数、在目录中找到的文件总数以及在目录中找到的字节总数。

这里是重要的代码:

class fileStats
{
public:
int totalFiles;
long long fileSize;
};

map< string, fileStats > fileMap;

fileMap[dirIter->path().extension()].totalFiles++;
fileMap[dirIter->path().extension()].fileSize += file_size( dirIter->path());

我不认为我可以使用映射的 .count 方法,除非我重载它,但是还有另一种更简单的方法吗?

最佳答案

除非我遗漏了一些东西,否则看起来您拥有一切现成的东西。扩展总数为

fileMap.size()

然后你可以迭代这个 map 打印文件数和字节数

for (auto i=fileMap.begin(); i!=fileMap.end(); ++i)
cout << i->first << '=' << i->second.totalFiles << ':' << i->second.fileSize << endl;

这是打印总数的测试程序。

#include <iostream>
#include <map>

class fileStats
{
public:
int totalFiles;
long long fileSize;

fileStats() : totalFiles(0), fileSize(0) {}
fileStats(int f, long long s) : totalFiles(f), fileSize(s) {}

fileStats& operator+=(const fileStats& other)
{
totalFiles += other.totalFiles;
fileSize += other.fileSize;
return *this;
}
};

int main(int argc, char* argv[]) {
typedef std::map< std::string, fileStats > map_type;

map_type fileMap;

fileMap["cpp"].totalFiles++;
fileMap["cpp"].fileSize += 11111;

fileMap["h"].totalFiles++;
fileMap["h"].fileSize += 22222;

fileMap["cpp"].totalFiles++;
fileMap["cpp"].fileSize += 33333;

fileStats totals;
for (map_type::const_iterator i=fileMap.begin(); i!=fileMap.end(); ++i)
totals += i->second;

std::cout << "total files=" << totals.totalFiles << ' ' << "total size=" << totals.fileSize << std::endl;

return 0;

关于c++ - 计算 map 中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983512/

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