为什么 Go 和 C++ 中的排序函数不同?我无法在 Go 中获得正确的结果

Why sort function in Go and C++ is different? And I can't get the right results in Go

我想对名为 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;
}

排序后inds120345。在 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

匿名函数参数ijinds中的索引,但程序使用参数作为nums中的索引。

通过使用 inds 将索引值转换为 nums 进行修复:

sort.Slice(inds, func(i, j int) bool {
    return nums[inds[i]] > nums[inds[j]]
})