提升::flat_set的迭代器无法合并

boost::flat_set of iterators cannot merge

本文关键字:合并 迭代器 set flat 提升      更新时间:2023-10-16

我正在尝试将boost::flat_set用于我需要唯一的一小组迭代器。代码无法编译,因为对make_reverse_iterator的调用不明确,但我不确定它是怎么发生的。我试图将问题简化为 MWE:

#include <boost/container/flat_set.hpp>
#include <set>
#include <iostream>
using Set = std::set<int>;
using SetIt = Set::iterator;
struct Comparator {
bool operator()(SetIt lhs, SetIt rhs) const {
return &(*lhs) < &(*rhs);
}
};

int main() {
std::set<int> x;
boost::container::flat_set<Set::iterator, Comparator> a;
boost::container::flat_set<Set::iterator, Comparator> b;
a.insert(x.insert(1).first);
a.insert(x.insert(2).first);
a.insert(x.insert(3).first);
a.insert(x.insert(4).first);
a.insert(x.insert(5).first);
b.insert(x.insert(3).first);
b.insert(x.insert(4).first);
b.insert(x.insert(5).first);
b.insert(x.insert(6).first);
b.insert(x.insert(7).first);
a.merge(b);
for (auto v : a)
std::cout << *v << 'n';
return 0;
}

这个问题显然在Boost 1.67 中得到了修复

我在Boost 1.66 中修复了错误。