这里的想法是编写一种特殊类型的迭代器来虚拟合并两个容器,就 BOOST_FOREACH 而言。请注意,我不是从现有的两个容器中创建新容器。我只是从第一个容器的 end() 跳转到第二个容器的 begin() 迭代器。我没有尝试编写实际的merged_iterator 类,但是虽然写起来可能有点长,但在技术上并不困难。我真的很惊讶没有使用谷歌找到类似的东西。不过,我并没有寻找太久!
template<typename Container>
boost::iterator_range<
merged_iterator<Container::iterator>
>
concat_containers( Container& c1, Container& c2 )
{
typedef merged_iterator<typename Container::iterator> MergedIterator;
typedef boost::iterator_range<MergedIterator> IteratorRange;
return IteratorRange(
MergeIterator( c1.begin(), c1.end(), c2.begin(), c2.end() ),
MergeIterator( c2.end(), c1.end(), c2.begin(), c2.end() ) );
}
// Now use a bit of magic to define merged_iterator<...>
// And you'll be able to write
BOOST_FOREACH( std::pair<int, int> i, concat_containers( map1, map2 ) )
{
// Do whatever you want here
}