常用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; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM