
Hi Steven, Adding a specialization for iter_swap typedef boost::tuple< std::vector<int>::iterator, std::vector<int>::iterator
iterator_tuple;
typedef boost::zip_iterator< iterator_tuple
ziterator;
namespace std { void iter_swap(ziterator a, ziterator b) { std::swap(a->get<0>(), b->get<0>()); std::swap(a->get<1>(), b->get<1>()); } } solved the problem for std::random_shuffle. For std::sort I provide a comparison functor for the tuple. but the compiler (VC8) complains about no match for _Rotate Any hint would be appreciated. andreas C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(1719) : error C2665: 'std::_Rotate' : none of the 3 overloads could convert all the argument types C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(1649): could be 'void std::_Rotate<_FwdIt>(_FwdIt,_FwdIt,_FwdIt,std::forward_iterator_tag)' with [ _FwdIt=boost::zip_iterator<iterator_tuple> ] C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(1666): or 'void std::_Rotate<_FwdIt>(_BidIt,_BidIt,_BidIt,std::bidirectional_iterator_tag)' with [ _FwdIt=boost::zip_iterator<iterator_tuple>, _BidIt=boost::zip_iterator<iterator_tuple> ] C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(1709): or 'void std::_Rotate<_FwdIt>(_RanIt,_RanIt,_RanIt,std::random_access_iterator_tag)' with [ _FwdIt=boost::zip_iterator<iterator_tuple>, _RanIt=boost::zip_iterator<iterator_tuple> ] while trying to match the argument list '(boost::zip_iterator<IteratorTuple>, boost::zip_iterator<IteratorTuple>, boost::zip_iterator<IteratorTuple>, boost::detail::iterator_category_with_traversal<Category,Traversal>)' with [ IteratorTuple=iterator_tuple ] and [ IteratorTuple=iterator_tuple ] and [ IteratorTuple=iterator_tuple ] and [ Category=std::input_iterator_tag, Traversal=boost::random_access_traversal_tag ] C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(3125) : see reference to function template instantiation 'void std::rotate<_BidIt>(_FwdIt,_FwdIt,_FwdIt)' being compiled with [ _BidIt=boost::zip_iterator<iterator_tuple>, _FwdIt=boost::zip_iterator<iterator_tuple> ] C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(3252) : see reference to function template instantiation 'void std::_Insertion_sort<_RanIt,_Pr>(_BidIt,_BidIt,_Pr)' being compiled with [ _RanIt=boost::zip_iterator<iterator_tuple>, _Pr=Compare, _BidIt=boost::zip_iterator<iterator_tuple> ] C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\algorithm(3261) : see reference to function template instantiation 'void std::_Sort<_RanIt,__int64,_Pr>(_RanIt,_RanIt,_Diff,_Pr)' being compiled with [ _RanIt=boost::zip_iterator<iterator_tuple>, _Pr=Compare, _Diff=__int64 ] Steven Watanabe wrote:
AMDG
Andreas Fabri wrote:
I have two vectors and want to random_shuffle them the same way using the zip_iterator. I thought the code below would do it, but when I execute it I see that both sequences get screwded up.
What do I wrong?
The problem is that std::iter_swap doesn't work for zip_iterator and there is no standard compliant way to fix it.
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users