2010-07-23 9 views
3

Je voudrais voir la STL la plus élégante, comme l'extension de l'algorithme de partition dans le STL:C de solution élégante à partitionner problème

given a vector of ints, partition the vector so that the positive integers appear 
to the front of the negative integers 
AND 
return a map<int, int> where map[i]=j means that integer at index i is now at j. 

Il est évident que la première partie (sans la deuxième exigence) est quelque chose comme

partititon(vec.begin(), vec.end(), IsEven) 

Je ne vois pas une façon de le faire sans réimplémentant réellement la partition et la construction de la carte le long du chemin.

Répondre

4

Copiez votre vecteur de ints dans un vecteur de quelque chose comme:

struct ValIdx 
{ 
    int val; 
    size_t idx; 
}; 

Partition avec un foncteur approprié, puis itérer sur le résultat de la copie des ints en arrière et sur la construction de votre carte.

Questions connexes