
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