std::experimental::ranges::lexicographical_compare

来自cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
实验性
技术规范
文件系统库(文件系统 TS)
库基础(库基础 TS)
库基础 2(库基础 TS v2)
库基础 3(库基础 TS v3)
并行扩展(并行 TS)
并行扩展 2(并行 TS v2)
并发扩展(并发 TS)
并发扩展 2(并发 TS v2)
概念(概念 TS)
范围(范围 TS)
反射(反射 TS)
数学特殊函数(特殊函数 TR)
实验性非 TS 功能特性
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
template< InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity,
          class Comp =ranges::less<>>
    requires IndirectStrictWeakOrder<Comp, projected<I1, Proj1>, projected<I2, Proj2>>
bool lexicographical_compare( I1 first1, S1 last1, I2 first2, S2 last2,
                              Comp comp = Comp{},

                              Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(1) (范围 TS)
template< InputRange R1, InputRange R2,

          class Proj1 =ranges::identity, class Proj2 =ranges::identity,
          class Comp =ranges::less<>>
    requires IndirectStrictWeakOrder<Comp, projected<ranges::iterator_t<R1>, Proj1>,
                                           projected<ranges::iterator_t<R2>, Proj2>>
bool lexicographical_compare( R1&& r1, R2&& r2, Comp comp = Comp{},

                              Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{});
(2) (范围 TS)
1) 检查第一范围 [first1last1) 是否按字典序小于第二范围 [first2last2)。经过分别以 proj1proj2 投射之后,使用给定的二元比较函数 comp 比较各个元素。
2)(1) 相同,但用 r1 为第一源范围并用 r2 为第二源范围,如同以 ranges::begin(r1)first1,以 ranges::end(r1)last1,以 ranges::begin(r2)first2,并以 ranges::end(r2)last2

字典序比较是具有下列性质的操作:

  • 两个范围进行逐元素比较。
  • 首个不匹配的元素定义哪个范围按字典序小于大于另一个。
  • 如果一个范围是另一个的前缀,则较短范围按字典序小于另一个。
  • 如果两个范围具有等价的元素且长度相同,则两个范围按字典序相等
  • 空范围按字典序小于非空范围。
  • 两个空范围按字典序相等

目录

[编辑]参数

first1, last1 - 要检验的第一元素范围
r1 - 要检验的第一元素范围
first2, last2 - 要检验的第二元素范围
r2 - 要检验的第二元素范围
comp - 运用于投射后元素的比较函数
proj1 - 运用于第一范围中元素的投射
proj2 - 运用于第二范围中元素的投射

[编辑]返回值

如果第一范围按字典序小于第二范围,则返回 true

[编辑]复杂度

最多 2·min(N1, N2) 次运用比较运算,其中 N1 = last1 - first1N2 = last2 - first2

[编辑]可能的实现

template<InputIterator I1, Sentinel<I1> S1, InputIterator I2, Sentinel<I2> S2, class Proj1 =ranges::identity, class Proj2 =ranges::identity, class Comp =ranges::less<>> requires IndirectStrictWeakOrder<Comp, projected<I1, Proj1>, projected<I2, Proj2>>bool lexicographical_compare(I1 first1, S1 last1, I2 first2, S2 last2, Comp comp = Comp{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{}){for(;(first1 != last1)&&(first2 != last2);(void)++first1, (void)++first2){if(ranges::invoke(comp, ranges::invoke(proj1, *first1), ranges::invoke(proj2, *first2)))returntrue;if(ranges::invoke(comp, ranges::invoke(proj2, *first2), ranges::invoke(proj1, *first1)))returnfalse;}return(first1 == last1)&&(first2 != last2);}

[编辑]示例

[编辑]参阅

当一个范围字典序小于另一个时返回 true
(函数模板)[编辑]
确定元素的两个集合是否相同
(函数模板)[编辑]
close