
Dear All, I have a problem with boost::iterator_facade. Here's an example: say I'm implementing an associative container that stores a sorted vector of keys and a separate sorted vector of values: template <typename KEY, typename VALUE> class vecmap { std::vector<KEY> keys; std::vector<VALUE> values; I can make an iterator for this that stores one iterator for each of the vectors: class iterator: public boost::iterator_facade<iterator, std::pair<KEY,VALUE>, boost::bidirectional_traversal_tag> { std::vector<KEY>::iterator ki; std::vector<VALUE>::iterator vi; void increment() { ++ki; ++vi; } void decrement() { --ki; --vi; } .... But what do I do about the reference type? I can't use std::pair<const KEY,VALUE>& because I'm not storing the keys and values in that way. It's almost possible to use std::pair<KEY,VALUE> for a const_iterator, but not if you want to allow the user to change the value through the reference. What I think I want to use is std::pair<KEY,VALUE&> i.e. the key is returned by value and only the value is returned by reference. But when I try this I get various cryptic errors about references to references and mpl things. So, has anyone else tried to do something like this? I wonder if boost::reference could be part of the solution. Thanks for any suggestions, Phil.