我想在不破坏原始顺序的情况下对名为nums
的切片进行排序。所以我用inds
来记录nums
的索引,并对inds
:进行排序
vector<int> nums = {1,3,2,1,1,1};
vector<int> inds = {0,1,2,3,4,5};
sort(inds.begin(), inds.end(),
[nums](int i, int j) -> bool
{
return nums[i] > nums[j];
});
for(int i : inds) {
cout << i;
}
排序后的inds
是120345
。在Go中,我测试:
nums := []int{1,3,2,1,1,1}
inds := []int{0,1,2,3,4,5}
sort.Slice(inds, func(i, j int) bool {
return nums[i] > nums[j]
})
fmt.Println(inds)
排序后的inds
是[1 0 2 3 4 5]
,这与C++的结果和我预期的不同。为什么Go不能很好地对inds
进行排序?
匿名函数参数i
和j
是inds
中的索引,但程序使用这些参数作为nums
中的索引。
通过使用inds
将索引值转换为nums
:进行修复
sort.Slice(inds, func(i, j int) bool {
return nums[inds[i]] > nums[inds[j]]
})