c++のメンバへのポインタの使い方をまとめます
利用例
たとえば以下のデータ構造について
struct Employee { int id; std::string name; double salary; }; std::vector<Employee> employees;
std::sort()で Employee::id をキーにソートしたい場合を考えます
この場合,メンバーポインタを使うと
sort_by_member(employees, &Employee::id);
と実装できるようになります
ソースコード
#include <vector> #include <algorithm> #include <string> struct Employee { int id; std::string name; double salary; }; template <typename T, typename U> void sort_by_member(std::vector<T>& vec, U T::* member) { std::sort(vec.begin(), vec.end(), [=](const T& a, const T& b) { return a.*member < b.*member; }); } int main() { std::vector<Employee> employees = { {102, "Alice", 70000.0}, {101, "Bob", 50000.0}, {103, "Charlie", 60000.0} }; sort_by_member(employees, &Employee::id); }