std::ranges::includes
来自cppreference.com
| 在标头 <algorithm> 定义
|
||
| 调用签名 |
||
| |
(1) | (C++20 起) |
| |
(2) | (C++20 起) |
2) 同 (1),但以
r1 与 r2 为源范围,如同分别以 ranges::begin(r1) 与 ranges::begin(r2) 为 first1 与 first2,并分别以 ranges::end(r1) 与 ranges::end(r2) 为 last1 与 last2。两个范围都必须按照给定的比较函数 comp 排序。子序列不需要连续。
此页面上描述的函数式实体是算法函数对象(非正式地称为 niebloid),即:
参数
| first1, last1 | - | 要检验的有序元素范围的迭代器-哨位对 |
| r1 | - | 要检验的有序元素范围 |
| first2, last2 | - | 要搜索的有序元素范围的迭代器-哨位对 |
| r2 | - | 要搜索的有序元素范围 |
| comp | - | 应用到投影后元素的谓词 |
| proj1 | - | 应用到第一范围中元素的投影 |
| proj2 | - | 应用到第二范围中元素的投影 |
返回值
若 [first2, last2) 是 [first1, last1) 的子序列则为 true;否则为 false。
复杂度
至多比较 2·(N1+N2-1) 次,其中 N1 为 ranges::distance(r1) 而 N2 为 ranges::distance(r2)。
可能的实现
|
示例
运行此代码
#include <algorithm>
#include <cctype>
#include <initializer_list>
#include <iomanip>
#include <iostream>
#include <locale>
#include <string>
template<class T>
std::ostream& operator<<(std::ostream& os, std::initializer_list<T> const& list)
{
for (os << "{ "; auto const& elem : list)
os << elem << ' ';
return os << "} ";
}
struct true_false : std::numpunct<char>
{
std::string do_truename() const { return "? Yes\n"; }
std::string do_falsename() const { return "? No\n"; }
};
int main()
{
std::cout.imbue(std::locale(std::cout.getloc(), new true_false));
auto ignore_case = [](char a, char b) { return std::tolower(a) < std::tolower(b); };
const auto
a = {'a', 'b', 'c'},
b = {'a', 'c'},
c = {'a', 'a', 'b'},
d = {'g'},
e = {'a', 'c', 'g'},
f = {'A', 'B', 'C'},
z = {'a', 'b', 'c', 'f', 'h', 'x'};
std::cout
<< z << "includes\n" << std::boolalpha
<< a << std::ranges::includes(z.begin(), z.end(), a.begin(), a.end())
<< b << std::ranges::includes(z, b)
<< c << std::ranges::includes(z, c)
<< d << std::ranges::includes(z, d)
<< e << std::ranges::includes(z, e)
<< f << std::ranges::includes(z, f, ignore_case);
}
输出:
{ a b c f h x } includes
{ a b c } ? Yes
{ a c } ? Yes
{ a a b } ? No
{ g } ? No
{ a c g } ? No
{ A B C } ? Yes
参阅
(C++20) |
计算两个集合的差集 (算法函数对象) |
(C++20) |
搜索元素范围的首次出现 (算法函数对象) |
(C++23)(C++23) |
检查范围是否包含给定元素或子范围 (算法函数对象) |
当一个序列是另一个的子序列时返回 true (函数模板) |