std::set_difference
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Defined in header <algorithm>
|
||
| template< class InputIt1, class InputIt2, class OutputIt > OutputIt set_difference( InputIt1 first1, InputIt1 last1, |
(1) | |
| template< class InputIt1, class InputIt2, class OutputIt, class Compare > |
(2) | |
[first1, last1)で発見されていないソート範囲[first2, last2)からd_firstで範囲の先頭に要素をコピーします. [first1, last1) which are not found in the sorted range [first2, last2) to the range beginning at d_first. You can help to correct and verify the translation. Click here for instructions.
compでソートされることを想定して期待しています。いくつかの要素がmで[first1, last1)とn回[first2, last2)倍であることが判明した場合、同等の要素があること、個別に扱われ、それが正確にd_firststd::max(m-n, 0)倍にコピーされます。結果の範囲は入力レンジのいずれかと重複することはできません.comp. Equivalent elements are treated individually, that is, if some element is found m times in [first1, last1) and n times in [first2, last2), it will be copied to d_first exactly std::max(m-n, 0) times. The resulting range cannot overlap with either of the input ranges.You can help to correct and verify the translation. Click here for instructions.
目次 |
[編集] パラメータ
| first1, last1 | - | 検討する要素の範囲
Original: the 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 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 | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following:
The signature does not need to have const &, but the function must not modify the objects passed to it. | |||||||||
| Type requirements | |||||||||||
-InputIt1 must meet the requirements of InputIterator.
| |||||||||||
-InputIt2 must meet the requirements of InputIterator.
| |||||||||||
-OutputIt must meet the requirements of OutputIterator.
| |||||||||||
[編集] 値を返します
You can help to correct and verify the translation. Click here for instructions.
[編集] 複雑
You can help to correct and verify the translation. Click here for instructions.
[編集] 可能な実装
| First version |
|---|
template<class InputIt1, class InputIt2, class OutputIt> OutputIt set_difference(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first) { while (first1 != last1) { if (first2 == last2) return std::copy(first1, last1, d_first); if (*first1 < *first2) { *d_first++ = *first1++; } else { if (! (*first2 < *first1)) { ++first1; } ++first2; } } return d_first; } |
| Second version |
template<class InputIt1, class InputIt2, class OutputIt, class Compare> OutputIt set_difference( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first, Compare comp) { while (first1 != last1) { if (first2 == last2) return std::copy(first1, last1, d_first); if (comp(*first1, *first2)) { *d_first++ = *first1++; } else { if (!comp(*first2, *first1)) { ++first1; } ++first2; } } return d_first; } |
[編集] 例
#include <iostream> #include <algorithm> #include <vector> #include <iterator> int main() { std::vector<int> v1 {1, 2, 5, 5, 5, 9}; std::vector<int> v2 {2, 5, 7}; std::vector<int> diff; std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::inserter(diff, diff.begin())); for (auto i : v1) std::cout << i << ' '; std::cout << "minus "; for (auto i : v2) std::cout << i << ' '; std::cout << "is: "; for (auto i : diff) std::cout << i << ' '; std::cout << '\n'; }
Output:
1 2 5 5 5 9 minus 2 5 7 is: 1 5 5 9
[編集] も参照してください
| 1セットが他のサブセットである場合はtrueを返します Original: returns true if one set is a subset of another The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (関数テンプレート) | |
| 2セット間の対称差を計算します Original: computes the symmetric difference between two sets The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (関数テンプレート) | |