Repo created
This commit is contained in:
parent
4af19165ec
commit
68073add76
12458 changed files with 12350765 additions and 2 deletions
29
libs/base/set_operations.hpp
Normal file
29
libs/base/set_operations.hpp
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
// Similar to set_difference(), but if element is present n times in the first sequence and once in
|
||||
// the second sequence, all n copies are filtered, insted of one.
|
||||
template <typename Iter1T, typename Iter2T, typename OutIterT, typename LessT>
|
||||
OutIterT SetDifferenceUnlimited(Iter1T beg1, Iter1T end1, Iter2T beg2, Iter2T end2, OutIterT out, LessT lessCompare)
|
||||
{
|
||||
while (beg1 != end1 && beg2 != end2)
|
||||
{
|
||||
if (lessCompare(*beg1, *beg2))
|
||||
{
|
||||
*out = *beg1;
|
||||
++beg1;
|
||||
++out;
|
||||
}
|
||||
else if (lessCompare(*beg2, *beg1))
|
||||
{
|
||||
++beg2;
|
||||
}
|
||||
else
|
||||
{
|
||||
++beg1;
|
||||
// This is the difference between set_difference and this function:
|
||||
// In set_difference the commented line should be present.
|
||||
// ++beg2;
|
||||
}
|
||||
}
|
||||
return std::copy(beg1, end1, out);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue