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