The Wayback Machine - https://web.archive.org/web/20180512210430/http://ja.cppreference.com:80/w/cpp/algorithm/includes
名前空間
変種
操作

std::includes

提供: cppreference.com
< cpp‎ | algorithm

 
 
アルゴリズムライブラリ
実行ポリシー (C++17)
非変更シーケンス操作
(C++11)(C++11)(C++11)
(C++17)
変更シーケンス操作
未初期化記憶域の操作
分割操作
ソート操作
バイナリサーチ操作
集合操作 (ソート済み範囲に対する)
includes

ヒープ操作
(C++11)
最小/最大演算
(C++11)
(C++17)
順列
数値演算
C のライブラリ
 
ヘッダ <algorithm> で定義
template<class InputIt1, class InputIt2 >

bool includes( InputIt1 first1, InputIt1 last1,

               InputIt2 first2, InputIt2 last2 );
(1)
template<class InputIt1, class InputIt2 >

bool includes( InputIt1 first1, InputIt1 last1,

               InputIt2 first2, InputIt2 last2, Compare comp );
(2)
戻りtrueソート範囲[first2, last2)からすべての要素がソート範囲[first, last)内検出された場合。 true空の場合も[first2, last2)を返します。.
Original:
Returns true if every element from the sorted range [first2, last2) is found within the sorted range [first, last). Also returns true if [first2, last2) is empty.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
最初のバージョンは両方とも範囲はoperator<でソートされることを想定して、2番目のバージョンは、それらが与えられた比較関数compでソートされることを想定してい.
Original:
The first version expects both ranges to be sorted with operator<, the second version expects them to be sorted with the given comparison function comp.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

目次

[編集]パラメータ

first1, last1 -
検討する要素の並べ替えられた範囲
Original:
the sorted range of elements to examine
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
first2, last2 -
を検索するための要素の並べ替えられた範囲
Original:
the sorted range of elements to search for
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
comp - 比較関数. 最初の値が二つ目の値より小さい 場合、 ​trueを返します.

比較関数のシグネチャは以下と同等でなければなりません.

 bool cmp(const Type1 &a, const Type2 &b);

シグネチャはconstを含まなくても構いませんが, 比較関数は渡されたオブジェクトを変更してはなりません.
Type1 および Type2 は、どちらも InputIt 型のオブジェクトの逆参照から暗黙に変換可能なものでなければなりません。 ​

型の要件
-
InputItInputIterator の要件を満たさなければなりません。

[編集]値を返します

true[first2, last2)からすべての要素が[first, last)のメンバーであるかどうか.
Original:
true if every element from [first2, last2) is a member of [first, last).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集]複雑性

最も2·(N1+N2-1)の比較で、どこN1=std::distance(first1, last1)N2=std::distance(first2, last2).
Original:
At most 2·(N1+N2-1) comparisons, where N1=std::distance(first1, last1) and N2=std::distance(first2, last2).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[編集]可能な実装

1つめのバージョン
template<class InputIt1, class InputIt2>bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2){for(; first2 != last2;++first1){if(first1 == last1 ||*first2 <*first1)returnfalse;if(!(*first1 <*first2))++first2;}returntrue;}
2つめのバージョン
template<class InputIt1, class InputIt2>bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare comp){for(; first2 != last2;++first1){if(first1 == last1 || comp(*first2, *first1))returnfalse;if(!comp(*first1, *first2))++first2;}returntrue;}

[編集]

#include <iostream>#include <algorithm>#include <cctype>   int main(){std::vector<char> v1 {'a', 'b', 'c', 'f', 'h', 'x'};std::vector<char> v2 {'a', 'b', 'c'};std::vector<char> v3 {'a', 'c'};std::vector<char> v4 {'g'};std::vector<char> v5 {'a', 'c', 'g'};std::vector<char> v6;   for(auto i : v1)std::cout<< i <<' ';std::cout<<"includes:\n";   for(auto i : v2)std::cout<< i <<' ';std::cout<<": "<< std::includes(v1.begin(), v1.end(), v2.begin(), v2.end())<<'\n';for(auto i : v3)std::cout<< i <<' ';std::cout<<": "<< std::includes(v1.begin(), v1.end(), v3.begin(), v3.end())<<'\n';for(auto i : v4)std::cout<< i <<' ';std::cout<<": "<< std::includes(v1.begin(), v1.end(), v4.begin(), v4.end())<<'\n';for(auto i : v5)std::cout<< i <<' ';std::cout<<": "<< std::includes(v1.begin(), v1.end(), v5.begin(), v5.end())<<'\n';for(auto i : v6)std::cout<< i <<' ';std::cout<<": "<< std::includes(v1.begin(), v1.end(), v6.begin(), v6.end())<<'\n';   auto cmp_nocase =[](char a, char b){return std::tolower(a)< std::tolower(b);}std::vector<char> v7 {'A', 'B', 'C'};for(auto i : v7)std::cout<< i <<' ';std::cout<<": "<< std::includes(v1.begin(), v1.end(), v7.begin(), v7.end(), cmp_nocase)<<'\n';}

出力:

a b c f h x includes: a b c : 1 a c : 1 g : 0 a c g : 0 A B C : 1

[編集]参照

2つの集合の差を計算します
(関数テンプレート)[edit]
指定範囲の要素に対して検索を行います
(関数テンプレート)[edit]
close