I have just started to use boost via boost::bimap.
I have a problem when using iterators to build a new bimap.
Here is a sample of my code :
class MyObject {...Definitions of MyObject...};
struct Position{};
// Wherever you meet Pos, it will mean Position
// Define my bimap type :
typedef boost::bimap<
set_of<tagged<double,Position> >,
multiset_of<tagged< MyObject*, MyObject> > //
because at one position, I can have many objects .... is that right ?
> PosMap;
typedef PosMap::value_type MyObjectPos;
PosMap posX ;
// This posX maps the position of my objects
for(MyObject::iterator it = MyObject.begin() ; it!= = MyObject.end() ; it++)
{
// it is an iterator on MyObjects
Vector3D position = it->GetPosition() ;
// Fill my map :
posX.insert(MyObjectPos(position.x(), (*it)));
}
// Now I would like just to select a window on my posX bimap:
double x = something ;
double R = something else ;
// PosMap::left_iterator tmp_itLowX = posX.left.lower_bound(x-R);
// PosMap::left_iterator tmp_itUpX = posX.left.lower_bound(x+R);
// Here is my problem :
PosMap m(posX.left.lower_bound(x-R), posX.left.lower_bound(x+R));
What is wrong with this piece of code ... ?
//___________________________________________________________
Here is the output from the compiler :
./boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp:
In member function ‘typename
boost::bimaps::container_adaptor::ordered_associative_container_adaptor_base<Base,
Iterator, ConstIterator, ReverseIterator, ConstReverseIterator,
KeyType, IteratorToBaseConverter, IteratorFromBaseConverter,
ReverseIteratorFromBaseConverter, ValueToBaseConverter,
ValueFromBaseConverter, KeyToBaseConverter,
FunctorsFromDerivedClasses>::type::iterator
boost::bimaps::container_adaptor::ordered_associative_container_adaptor<Base,
Iterator, ConstIterator, ReverseIterator, ConstReverseIterator,
KeyType, IteratorToBaseConverter, IteratorFromBaseConverter,
ReverseIteratorFromBaseConverter, ValueToBaseConverter,
ValueFromBaseConverter, KeyToBaseConverter,
FunctorsFromDerivedClasses>::lower_bound(const CompatibleKey&)
[with CompatibleKey = double, Base =
boost::multi_index::detail::ordered_index<boost::multi_index::member<boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>, double,
&boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>::left>, std::less<double>,
boost::multi_index::detail::nth_layer<2,
boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
boost::bimaps::detail::bimap_core<boost::bimaps::set_of<boost::bimaps::tags::tagged<double,
Position>, std::less<double> >,
boost::bimaps::multiset_of<boost::bimaps::tags::tagged<MyObject*,
MyObject>, std::less<MyObject*> >, mpl_::na, mpl_::na,
mpl_::na>::core_indices,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > >,
boost::mpl::v_item<Position, boost::mpl::vector0<mpl_::na>,
0>, boost::multi_index::detail::ordered_unique_tag>, Iterator =
boost::bimaps::detail::set_view_iterator<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > > > > >, ConstIterator
=
boost::bimaps::detail::const_set_view_iterator<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > > > > >,
ReverseIterator =
boost::bimaps::detail::set_view_iterator<boost::reverse_iterator<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > > > > > >,
ConstReverseIterator =
boost::bimaps::detail::const_set_view_iterator<boost::reverse_iterator<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > > > > > >, KeyType =
boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, false>, IteratorToBaseConverter =
boost::bimaps::container_adaptor::support::iterator_facade_to_base<boost::bimaps::detail::set_view_iterator<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > > > > >,
boost::bimaps::detail::const_set_view_iterator<boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
std::allocator<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> > > > > > >,
IteratorFromBaseConverter = mpl_::na, ReverseIteratorFromBaseConverter =
mpl_::na, ValueToBaseConverter =
boost::bimaps::relation::detail::get_mutable_relation_functor<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> >, ValueFromBaseConverter =
boost::bimaps::relation::support::get_above_view_functor<boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true> >, KeyToBaseConverter =
boost::bimaps::detail::set_view_key_to_base<double,
boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
boost::multi_index::member<boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>, double,
&boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>::left> >, FunctorsFromDerivedClasses =
boost::mpl::vector<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na>]’:
include/MyObjectManager.icc:184: instantiated from
‘std::vector<MyObject*, std::allocator<MyObject*> >
MyObjectManager<T>::FindClosestITsWithinGivenRange(const
ThreeVector&, double) [with T = Object]’
kit.cc:240: instantiated from here
./boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp:257:
erreur: no match for call to
‘(boost::bimaps::detail::set_view_key_to_base<double,
boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>,
boost::multi_index::member<boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>, double,
&boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>::left> >) (const double&)’
./boost/bimap/detail/set_view_base.hpp:38: note: candidats sont: const
Key boost::bimaps::detail::set_view_key_to_base<Key, Value,
KeyToBase>::operator()(const Value&) const [with Key = double,
Value =
boost::bimaps::relation::mutant_relation<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, mpl_::na, true>, KeyToBase =
boost::multi_index::member<boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>, double,
&boost::bimaps::relation::detail::relation_storage<boost::bimaps::tags::tagged<const
double, Position>, boost::bimaps::tags::tagged<MyObject* const,
MyObject>, true>::left>]
//___________________________________________________________
Thank you very much for your help and guidance,
Mathieu