此時沒有大於,小於這類概念,而是按照前後規則進行排序,C++中有許多排序規則,如:std::less<T>,std::greater<T>,等等,這些規則都有一個共性,less
bool 對象名(或函數名)(const T &left,const T &right); // 若返回真,則表示 left 在 right 以前; // 若返回假,則表示 left 在 right 以後,或者 left 與 right 在同一位置.如: // std::less<int>()(3,7) 返回真,代表在 std::less 定義的規則中,3 在 7 的前面; // std::greater<int>()(7,3) 返回真,代表在 std::greater 定義的規則中,7 在 3 的前面.
lexicographical compare;用於比較2個區間,具體的規則是2個區間的前後關係是經過2個區間中第一對不相同(不相同,即意味在前後關係中,不在同一個位置)的元素決定的,設區間 A 的 a 與區間 B 的 b 不相同,若 a 在 b 以前,則認爲區間 A 在區間 B 以前;若 a 在 b 以後,則認爲區間 A 在區間 B 以後,若兩個區間的元素一直相同,則長度短的區間在長度較長的區間以前;則區間的長度同樣,則認爲兩個區間位於同一位置.函數
// 版本1 template <class InputIterator1, class InputIterator2> bool lexicographical_compare(InputIterator1 first1,InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); // 版本2 template <class InputIterator1, class InputIterator2, class Compare> bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp);
若返回真,則代表區間 [first1,last1) 在區間 [first2,last2) 以前;在第一個版本中,使用的判斷規則是 std::less<T>;在第2個版本中,使用的是 Compare 定義的規則.spa
// 版本1 template <class InputIterator1, class InputIterator2> bool equal (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); // 版本2 template <class InputIterator1, class InputIterator2, class BinaryPredicate> bool equal (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate pred);
用於判斷區間 [first1,last1) 與區間 [first2,first2+last1-first1) 是否相同,區間相同的惟一條件是按順序比較,區間中的元素都相同;在版本1,使用 operator==() 來判斷2個元素是否相同;在版本2中,使用 pred 定義的規則判斷區間是否相同,即若 pred(ele1,ele2)==true,則認爲元素 ele1,ele2 相同.code
// equal() 的一個可能實現; while(first1 != last1){ if(!pred(*first1,*first2)) return false; ++first1; ++first2; } return true;