最終更新日 2008年02月07日 up top

STLのvectorに構造体を突っ込んだときのソート

STL(Standart Template Liblary)のvectorに構造体を突っ込んだときに、 その構造体のメンバでソートを行う方法。判ってしまえば簡単なのだけど、 ネットで結構苦労してやっと判明したので。

#include <stdio.h> #include <sys/types.h> #include <algorithm> #include <string> #include <vector> using namespace std; // 構造体の定義 struct FI { string path; string name; int size; }; // vectorの定義 std::vector<FI> vec; // 評価関数 bool name_asc( const FI& left, const FI& right ) { return left.name < right.name; } bool name_desc( const FI& left, const FI& right ) { return left.name > right.name; } int main( int argc, char* argv[] ) { FI *fi = new FI; fi->path = "/bin/abc"; fi->name = "abc"; fi->size = 1024; vec.push_back( *fi ); fi->path = "/bin/def"; fi->name = "def"; fi->size = 2048; vec.push_back( *fi ); fi->path = "/bin/ghi"; fi->name = "ghi"; fi->size = 4096; vec.push_back( *fi ); // ソート std::sort( vec.begin(), vec.end(), name_desc ); // 表示 for ( int i = 0; i < vec.size(); i ++ ) { puts( vec[i].name.c_str() ); } return 0; }