2

目前正在编写一个程序,该程序将解析一个目录(使用 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 方法,除非我重载它,但是还有另一种更简单的方法吗?

4

1 回答 1

2

Unless I am missing something, looks like you have everything readily available. Total number of extensions is

fileMap.size()

Then you can iterate of this map printing number of files and byte count

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

Here is the test program that prints totals.

#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;

}

于 2013-08-01T01:37:51.500 回答