此时没有大于,小于这类概念,而是按照前后规则进行排序,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;