首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

避免重複造輪子——善用標準庫(續二):C++ STL sort 與 Functor 特化實戰

     編輯:關於C語言

面試題:對 Person 向量排序

結構:

struct Person { int num; string name; }; // 無 operator<

規則:num 升序,相同則 name 升序。

STL 解法:特化 std::less

namespace std {
    template<> struct less {
        bool operator()(const Person& p1, const Person& p2) const {
            if (p1.num < p2.num) return true;
            if (p1.num == p2.num && p1.name < p2.name) return true;
            return false;
        }
    };
}
int main() {
    vector v = { {2,"smith"}, {1,"john"}, {2,"micheal"}, {1,"micheal"}, {3,"albert"} };
    sort(v.begin(), v.end(), less());
    for_each(v.begin(), v.end(), [](const Person& p) { 
        cout << "Person: " << p.num << ", " << p.name << endl; 
    });
}

輸出正確排序結果。

為什麼不用手寫排序?

  • 工程師需掌握演算法原理,但生產代碼應優先用標準庫:功能完備、效能經驗證、邊界情況處理完善
  • 手寫易出錯、維護成本高、程式碼膨脹
  • Boost 等第三方庫雖強但非標準,視專案策略採用

C++11 Lambda 讓比較邏輯內聯更簡潔 (見下篇)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved