image.png

    1. struct Closer
    2. {
    3. T1 value;
    4. T2 com;
    5. Closer(T1 _value, T2 _com) : value(_value), com(_com) {}
    6. bool operator()(T1 a1, T1 a2)
    7. {
    8. int dis1 = com(a1, value);
    9. int dis2 = com(a2, value);
    10. if (dis1 == dis2)
    11. return a1 < a2;
    12. else
    13. return dis1 < dis2;
    14. }
    15. };

    第一眼看起来没有头绪,就只能从 main 函数的 Closer 调用中找找线索

    • Closer<int, int (*)(int, int)>(n, Distance1)); 这是一个对象创建的语句,模板中第二个参数就是一个函数指针,直接用 Closer 中的 T2 替换就行;那么对应的,这条语句就暗示我们,要在 struct Closer 中弄两个成员变量,分别存这个 n 和函数指针;同时这也提醒我们要写一个构造函数
    • 同时还要兼顾 sort 函数,所以再重载一下 () 运算符就行了