algorithm

原创
2015/02/12 20:38
阅读数 61

lexicographical_compare

比较关系

  • 此时没有大于,小于这类概念,而是按照先后规则进行排序,C++中有许多排序规则,如:std::less<T>,std::greater<T>,等等,这些规则都有一个共性,

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 定义的规则.

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 相同.

// equal() 的一个可能实现;
while(first1 != last1){
    if(!pred(*first1,*first2))
        return false;
    ++first1;
    ++first2; 
}
return true;


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部