Boost logo

Boost Users :

Subject: Re: [Boost-users] ranking of ublas vector
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2010-03-13 17:12:08


AMDG

Kraus Philipp wrote:
> I have a problem with the boost libs (1.42). Your code compiles
> without errors, but
> in the "operator_lambda_func_base.hpp" at line 135 the compilere shows
> the error
> 4 times:
> conversion from 'double' to non-scalar type
> 'boost::lambda::detail::unspecified' requested
> <snip>
> Can you please help to solve this problem?

Obviously I should have tried to compile before posting...

Apparently Lambda doesn't work with uBLAS by default.

#include <boost/iterator/counting_iterator.hpp>
#include <boost/iterator/permutation_iterator.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/numeric/ublas/vector.hpp>
#include <algorithm>
#include <iostream>

namespace ublas = boost::numeric::ublas;

namespace boost {
namespace lambda {

template<class T, class Allocator, class B>
struct plain_return_type_2<other_action<subscript_action>,
ublas::vector<T, Allocator>, B> {
  typedef typename ublas::vector<T, Allocator>::reference type;
};

}
}

int main() {
    ublas::vector<long double> vec(5);
    vec[0] = 2.0;
    vec[1] = 1.0;
    vec[2] = 3.0;
    vec[3] = 5.0;
    vec[4] = 4.0;

    using namespace boost::lambda;
    std::vector<std::size_t>
temp(boost::counting_iterator<std::size_t>(0),
boost::counting_iterator<std::size_t>(vec.size()));
    std::sort(temp.begin(), temp.end(), var(vec)[_1] < var(vec)[_2]);
    std::vector<std::size_t> ranking(temp.size());
    std::copy(boost::counting_iterator<std::size_t>(0),
boost::counting_iterator<std::size_t>(vec.size()),
      boost::make_permutation_iterator(ranking.begin(), temp.begin()));

    std::copy(ranking.begin(), ranking.end(),
std::ostream_iterator<std::size_t>(std::cout, " "));
}

In Christ,
Steven Watanabe


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net