目前正在编写一个程序,它将解析目录(使用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方法,除非我重载它,但还有另一种更简单的方法吗?
答案 0 :(得分:2)
除非我遗漏某些东西,否则看起来你已经拥有了所有东西。扩展总数为
fileMap.size()
然后你可以迭代这个地图打印文件数和字节数
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;
}