#include <algorithm>
#include <iostream>
#include <array>
long * IndexSort( unsigned long int vectorLength, double * column)
{
long * index = new long [ vectorLength] ( ) ; // I really don't recommend this line
long n = 0 ;
std:: generate ( index, index + vectorLength, [ & ] { return n++ ; } ) ;
std:: sort ( index, index + vectorLength, [ & ] ( long v1, long v2)
{ return column[ v1] < column[ v2] ; } ) ;
return index;
}
using namespace std;
int main( )
{
std:: array < double ,20 > testData =
{ 0.8147 ,0.9058 ,0.127 ,0.9134 ,0.6324 ,0.0975 ,0.2785 ,
0.5469 ,0.9575 ,0.9649 ,0.1576 ,0.9706 ,0.9572 ,0.4854 ,
0.8003 ,0.1419 ,0.4218 ,0.9157 ,0.7922 ,0.9595 } ;
long * indices = IndexSort( testData.size ( ) , & testData[ 0 ] ) ;
for ( size_t i = 0 ; i < testData.size ( ) ; ++ i )
cout << testData[ indices[ i] ] << " has an index of " << indices[ i] << "\n " ;
delete [ ] indices;
}
ICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAjaW5jbHVkZSA8YXJyYXk+CiAKICAgIGxvbmcqIEluZGV4U29ydCh1bnNpZ25lZCBsb25nIGludCB2ZWN0b3JMZW5ndGgsIGRvdWJsZSogY29sdW1uKQogICAgewogICAgICAgIGxvbmcgKmluZGV4ID0gbmV3IGxvbmdbdmVjdG9yTGVuZ3RoXSgpOyAvLyBJIHJlYWxseSBkb24ndCByZWNvbW1lbmQgdGhpcyBsaW5lCiAgICAgICAgbG9uZyBuID0gMDsKICAgICAgICBzdGQ6OmdlbmVyYXRlKCBpbmRleCwgaW5kZXggKyB2ZWN0b3JMZW5ndGgsIFsmXSB7IHJldHVybiBuKys7IH0pOwogICAgICAgIHN0ZDo6c29ydChpbmRleCwgaW5kZXggKyB2ZWN0b3JMZW5ndGgsIFsmXShsb25nIHYxLCBsb25nIHYyKSAKICAgICAgICAgICAgICAgICB7IHJldHVybiBjb2x1bW5bdjFdIDwgY29sdW1uW3YyXTsgfSk7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiAgICBpbnQgbWFpbigpCiAgICB7ICAKICAgICAgc3RkOjphcnJheTxkb3VibGUsMjA+IHRlc3REYXRhID0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MC44MTQ3LDAuOTA1OCwwLjEyNywwLjkxMzQsMC42MzI0LDAuMDk3NSwwLjI3ODUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjU0NjksMC45NTc1LDAuOTY0OSwwLjE1NzYsMC45NzA2LDAuOTU3MiwwLjQ4NTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjgwMDMsMC4xNDE5LDAuNDIxOCwwLjkxNTcsMC43OTIyLDAuOTU5NX07CiAgICAgIGxvbmcgKmluZGljZXMgPSBJbmRleFNvcnQodGVzdERhdGEuc2l6ZSgpLCAmdGVzdERhdGFbMF0pOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRlc3REYXRhLnNpemUoKTsgKytpICkKICAgICAgICBjb3V0IDw8IHRlc3REYXRhW2luZGljZXNbaV1dIDw8ICIgIGhhcyBhbiBpbmRleCBvZiAiIDw8IGluZGljZXNbaV0gPDwgIlxuIjsKICAgICAgZGVsZXRlIFtdIGluZGljZXM7CiAgICB9