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