【发布时间】:2015-09-10 15:28:13
【问题描述】:
我有一个值向量。我想根据这些值得到一个排序的索引列表。
除了出现相同值的情况外,我已经很好地完成了这项工作。当出现相同的值时,我希望索引保持有序。
例如我有这个测试用例:
std::vector< size_t > idx;
std::vector< int > val;
for( int i = 0; i < 40; i++ )
{
idx.push_back( i );
val.push_back( i % 10 );
}
std::sort( idx.begin(), idx.end(), [&]( size_t a, size_t b )
{
return val[a] < val[b];
} );
这会将索引数组排序为以下内容:
(0,10,30,20,1,31,21,11,2,22,12,32,3,13,23,33,4,14,24,34,5,15,25,35,6,16,26,36,7,17,27,37,8,28,18,38,9,29,19,39)
但我希望数组按以下顺序排列:
(0,10,20,30,1,11,21,31,2,12,22,32,3,13,23,33,4,14,24,34,5,15,25,35,6,16,26,36,7,17,27,37,8,18,28,38,9,19,29,39)
有没有一种简单的方法可以修改我的 lambda 以按照最后一个指定的顺序获取这些值?
提前干杯!
【问题讨论】:
-
@MaksimSolovjov:知道会有一个简单的解决方案 :D 把它作为答案,我会接受它:)
-
很高兴我能帮上忙 :)