std::lexicographical_compare

函数原型:

default (1)
template <class InputIterator1, class InputIterator2>
  bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
                                InputIterator2 first2, InputIterator2 last2);
custom (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>,则返回true。否则,返回false。

所谓字典序比较,指的是两个序列分别从第一个开始一一按照字典序进行比较,如果相同位置的元素相同,则继续向后比较,直到相同位置出现不同的元素为止。

示例:

// lexicographical_compare example
#include <iostream>     // std::cout, std::boolalpha
#include <algorithm>    // std::lexicographical_compare
#include <cctype>       // std::tolower

// a case-insensitive comparison function:
bool mycomp (char c1, char c2)
{ return std::tolower(c1)<std::tolower(c2); }

int main () {
  char foo[]="Apple";
  char bar[]="apartment";

  std::cout << std::boolalpha;

  std::cout << "Comparing foo and bar lexicographically (foo<bar):\n";

  std::cout << "Using default comparison (operator<): ";
  std::cout << std::lexicographical_compare(foo,foo+5,bar,bar+9);
  std::cout << ‘\n‘;

  std::cout << "Using mycomp as comparison object: ";
  std::cout << std::lexicographical_compare(foo,foo+5,bar,bar+9,mycomp);
  std::cout << ‘\n‘;

  return 0;
}

默认比较函数,使用ASCII 进行比较,例如本例中‘A‘为65, ‘a‘为97,因此‘a‘>‘A‘。

自定义的比较函数mycomp中,将所有的字符转换成为小写,所以第一个未匹配的字符是第三个的‘p‘和‘a‘。

输出:

Comparing foo and bar lexicographically (foo<bar):
Using default comparison (operator<): true
Using mycomp as comparison object: false

性能分析:

最多比较次数为: 2*min(count1,count2)

时间: 2024-10-29 19:10:36

std::lexicographical_compare的相关文章

STL algorithm算法lexicographical_compare(30)

lexicographical_compare原型: std::lexicographical_compare default (1) template <class InputIterator1, class InputIterator2> bool lexicographical_compare (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); custom

STL_算法_区间的比較(equal、mismatch、 lexicographical_compare)

C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) //全部容器适用 equal(b,e,b2)       //用来比較第一个容器[b,e)和第二个容器b2开头,是否相等 equal(b,e,b2,p) mismatch(b,e,b2)    //用来查找两个容器中第一个不相等的数据,返回迭代器 mismatch(b,e,b2,p) lexicographical_compare(b,e,b2,e2)      //用来比較第一个区间是否比第二个区间小 lexicogr

Array STL

Arrays STL各种实现代码. <C++标准程序库> 1 /* 2 2015.4 3 an STL container (as wrapper) for arrays of constant size. 4 5 */ 6 7 #pragma warning(disable : 4996) 8 #include <iostream> 9 #include <cstddef> 10 #include <stdexcept> 11 #include <a

学习STL -- 向量vector

在STL中向量vector是使用数组的形式实现的,因此向量具有顺序表的所有特点,可以快速随机存取任意元素.向量是同一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组.与定义数组不同,向量在实例化是不需要声明长度,标准库负责管理和储存元素相关的内存,不用担心长度不够. vector容器中的元素是连续存放的,当容器中增加一个新元素的时候,如果原来的存储空间刚好被用完,那么系统需要重新申请一块更大的连续存储空间,把原来的元素复制到新的空间,并在最后添加新元素,最后再撤销久

c++中的 Stl 算法(很乱别看)

1 #include <iostream> 2 #include <vector> 3 #include <functional> 4 #include <algorithm> 5 #include <string> 6 #include <array> 7 #include <ctime> 8 #include <cstdlib> 9 #include <random> 10 #include &

[转]An STL compliant sorted vector-源码示例

原文地址:http://www.codeproject.com/Articles/3217/An-STL-compliant-sorted-vector 最近在看sorted vectored的一些东西,自己封装了一个sorted vector类型,后来找到了codeproject上的一个源码示例,感觉写的不错,可以借鉴一下.       sorted_vector adapts a std::vector to the interface required by std::set/std::m

boost uuid

uuid: uuid库是一个小的使用工具,可以表示和生成UUID UUID是University Unique Identifier的缩写,它是一个128位的数字(16字节),不需要有一个中央认证机构就可以创建全国唯一的标示符.别名:GUID uuid位于名字空间boost::uuisd,没有集中的头文件,把功能分散在了若干小文件中,因此为了使用uuid组件,需要包含数个头文件,即:#include <boost/uuid/uuid.hpp>#include <boost/uuid/uu

C++算法库 测试代码

// STL算法.cpp : 定义控制台应用程序的入口点. //最后修改时间:2018/02/13,测试平台 vs2017 /* STL六个部分 容器:见相关工程,学习上有两个难点:双端队列的实现细节,RBtree实现细节 分配器:allocator,学习版本是侯捷的书,sgi新版本增了继承层次.内存学习的高级主题 算法:本工程,容器无关的算法 适配器:容器/仿函数.基于容器实现的栈,单链表等 迭代器:最好是参考网站内容http://zh.cppreference.com/w/cpp/itera

实战c++中的智能指针unique_ptr系列-- 使用std::unique_ptr代替new operator(错误:‘unique_ptr’ is not a member of ‘std’)

写了很多篇关于vector的博客,其实vector很便捷,也很简单.但是很多易错的问题都是vector中的元素为智能指针所引起的.所以决定开始写一写关于智能指针的故事,尤其是unique_ptr指针的故事. 这是个开始,就让我们使用std::unique_ptr代替new operator吧! 还是用程序说话: #include<iostream> int main() { while (true) int *x = new int; } 看下任务管理器中的内存: 此时使用智能指针unique