I wanted to use zip_iterator to concurrently sort two arrays by the
values in one of them. It didn't work. Most of the values were
over-written by one of the pairs. I figured out that there was a
problem with the swapping, so I made this small test case. Compiled
with GCC 4.6.1 on Ubuntu 11.10
#include <utility>
#include <iostream>
#include
int main()
{
std::vector<int> a = { 1, 2 };
std::vector<int> b = { 100, 200 };
auto first = boost::make_zip_iterator(
boost::make_tuple(a.begin(), b.begin()));
auto last = boost::make_zip_iterator(
boost::make_tuple(a.begin() + 1, b.begin() + 1));
std::cout << first->get<0>() << ' ' << last->get<0>() << '\n';
std::cout << first->get<1>() << ' ' << last->get<1>() << "\n\n";
using std::swap;
using std::iter_swap;
// swap(*first, *last); // doesn't compile
iter_swap(first, last);
std::cout << first->get<0>() << ' ' << last->get<0>() << '\n';
std::cout << first->get<1>() << ' ' << last->get<1>() << "\n\n";
}
Output:
1 2
100 200
2 2
200 200
Expected Output:
1 2
100 200
2 1
200 100
Is this a known problem?