Am 13.03.2010 um 22:18 schrieb Steven Watanabe:

AMDG

Kraus Philipp wrote:
I have a very large non sparse ublas vector (most long double content).
I would like to sort this vector without change the vector content, but
I know the rank of the elements like

the smalest element in the vector is the 312 element in the original
vector (for example).

Is there a boost implementation for create ranking of elements?

There isn't, but it's fairly straightforward to do.

ublas::vector<long double> vec;

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()));

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

I have set this includes:
#include <boost/iterator/counting_iterator.hpp>
#include <boost/iterator/permutation_iterator.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/numeric/ublas/vector.hpp>

Can you please help to solve this problem?

Thank

Phil