mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-20 13:23:59 +00:00
committed by
Konstantin Pastbin
parent
c9cbb64f12
commit
76ffc99abd
31
libs/base/set_operations.hpp
Normal file
31
libs/base/set_operations.hpp
Normal file
@@ -0,0 +1,31 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user