作者:倾城修罗__598 | 来源:互联网 | 2023-05-17 20:51
我有一个价值向量.我想根据这些值得到一个排序的索引列表.我有合理的工作,除非出现相同的值.当出现相同的值时,我希望指数保持有序.例如,我有这个测试用例:std::vector
我有一个价值向量.我想根据这些值得到一个排序的索引列表.
我有合理的工作,除非出现相同的值.当出现相同的值时,我希望指数保持有序.
例如,我有这个测试用例:
std::vector idx;
std::vector 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] } );
这会将索引数组排序为以下内容:
(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以按照上一个指定的顺序获取这些值?
提前干杯!
解决方法:
你应该使用std::stable_sort.
在你的特定情况下,你可以调整lambda以在val [a] == val [b]时将b与b进行比较,但这会使你的意图模糊到未来可能偶然发现此代码的开发人员.