编程语言
首页 > 编程语言> > 常用C/C++函数(文件夹遍历,Map根据Value排序)

常用C/C++函数(文件夹遍历,Map根据Value排序)

作者:互联网

1,遍历文件夹下的所有文件

 

#ifndef FILELIST_H
#define FILELIST_H

#include <string>
#include <vector>
#include <fstream>
#include <windows.h>
#include <iostream>

using namespace std;
string filetype = ".pgm";

//遍历文件夹下的文件名列表(包括嵌套文件夹)
void get_filelist(char *foldname,vector<string> &filelist)
{
    HANDLE hFind;
    WIN32_FIND_DATA fileData;
    string line;
    char fn[MAX_PATH];
    char tmpfn[MAX_PATH];
    strcpy(fn,foldname);

    //需要对文件夹名的字符串进行处理
    if(fn[strlen(fn) -1] != '\\' )
    {
        strcat(fn, "\\");
    }

    //留意顺序,此时fn已加入"\\"
    strcpy(tmpfn,fn);
    //不加*会出错!
    strcat(fn, "*");

    hFind = FindFirstFile(fn, &fileData);
    FindNextFile(hFind, &fileData);
    while(FindNextFile(hFind, &fileData)){
        //如果扫描到的当前为文件夹
        if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if(fileData.cFileName[0]!='.')
            {
                char szFile[MAX_PATH];
                strcpy(szFile,tmpfn);
                strcat(szFile,fileData.cFileName);
                get_filelist(szFile,filelist);
            }
        }
        //扫描到文件
        else
        {
            line = (string)tmpfn;
            line+=fileData.cFileName;
            if (line.find(filetype,0)!=string::npos)
            {
                filelist.push_back(line);
            }
            else continue;
        }
        //cout<<line<<endl;
    }
}
#endif

 

如果出现“该转换要求 reinterpret_cast、C 样式转换或函数类型转换”错误,解决办法:
进入项目的属性设置的“配置属性”里的“常规”项,在“字符集”那里把“使用Unicode字符集”改成“使用多字节字符集”。

 

 2,C++中,根据Map的Value值来排序

#include <map>
#include <vector>
#include <algorithm>

typedef pair<string,double> PAIR;

//Define outside
int cmp(const PAIR& x, const PAIR& y)
{
    return x.second < y.second;
}

void main()
{
  map<string,double> imgdis; //待排序对象,根据double值排序
  vector<PAIR> vecpair;
  for (map<string,double>::iterator curr = imgdis.begin(); curr != imgdis.end(); ++curr) { vecpair.push_back(make_pair(curr->first, curr->second)); } sort(vecpair.begin(), vecpair.end(), cmp);   //输出排序后的键值对
for(int i = 0 ;i<vecpair.size();i++) { printf("%d",i+1); //图省事 cout<<" "<<vecpair[i].first<<" "<<vecpair[i].second<<endl; } }

 

转载于:https://www.cnblogs.com/idaidai/archive/2012/12/03/functions_common_used.html

标签:Map,curr,Value,文件夹,C++,fileData,include,line,fn
来源: https://blog.csdn.net/weixin_34318326/article/details/94035108