algorithm

lexicographical_compare

比較關係

  • 此時沒有大於,小於這類概念,而是按照前後規則進行排序,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

  • lexicographical compare;用於比較2個區間,具體的規則是2個區間的前後關係是經過2個區間中第一對不相同(不相同,即意味在前後關係中,不在同一個位置)的元素決定的,設區間 A 的 a 與區間 B 的 b 不相同,若 a 在 b 以前,則認爲區間 A 在區間 B 以前;若 a 在 b 以後,則認爲區間 A 在區間 B 以後,若兩個區間的元素一直相同,則長度短的區間在長度較長的區間以前;則區間的長度同樣,則認爲兩個區間位於同一位置.函數

lexicographical_compare

// 版本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

equal

// 版本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;
相關文章
相關標籤/搜索