|
Ublas : |
From: johanngoetz (jgoetz_at_[hidden])
Date: 2008-05-31 12:22:31
martux wrote:
>
> Hi, I tried using a ublas vector as key type in a std::map along the lines
> of
>
> boost::ublas::vector<double> x(2);
> std::map<boost::ublas::vector<double>, int> vm;
> vm[x] = 1;
>
> which wont compile (gcc 4.0.3) due to
>
> /usr/lib/gcc/x86_64-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_function.h:227:
> error: no match
> for âoperator<â in â__x < __yâ.
>
> Adding an implementation of
>
> bool operator<(boost::ublas::vector<double> const& A,
> boost::ublas::vector<double> const& B) {...}
>
> unfortunately doesnt help. Could anyone please point out what I am
> missing?
>
I am working on a fieldmap object based on std::map of
ublas::bounded_vectors so that I can take advantage of matrix multiplication
of ublas as well as the storage/iterators of std::map. However,
ublas::vector (and ublas::bounded_vector) do not have the necessary
properties to comply with the requirements of the Key value of a std::map.
I have a workaround, though I am sure it could be written in a much more
general way, I just don't know how to do it. Since I am working with
bounded_vector<int, dimension> where dimensions are small, I created a
operator< and a functor bouded_vector_less<T> and pass this to the third
template parameter of std::map. Thus:
template<typename _Tp, size_t _Dim>
inline bool
operator<(
const bounded_vector<_Tp, _Dim>& __x,
const bounded_vector<_Tp, _Dim>& __y
) {
return std::lexicographical_compare(
__x.begin(),
__x.end(),
__y.begin(),
__y.end()
);
}
template <typename _Tp>
struct my_less {
bool
operator()(
const _Tp& __x,
const _Tp& __y
) const {
return __x < __y;
}
};
This is more or less a copy of what is in the standard template library.
Therefore, when I create the map I can do this:
std::map<
ublas::bounded_vector<int, 3>,
ublas::bounded_vector<float, 3>,
my_less<
ublas::bounded_vector<int, 3>
>
> fieldmap;
Any suggestions on making this more general and/or more efficient would be
greatly appreciated!
-- View this message in context: http://www.nabble.com/ublas%3A%3Avector-in-std%3A%3Amap-tp9338948p17576950.html Sent from the Boost - uBLAS mailing list archive at Nabble.com.