计算地图中的出现次数

时间:2013-08-01 00:54:05

标签: c++

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

1 个答案:

答案 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;

}