为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
UYOU 2022-11-23 16:20:46

我想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)

而 The indsis [1 0 2 3 4 5]after sort,这和C++的结果不一样,和我预想的不一样。为什么 Go 排序inds不好?


查看完整描述

1 回答

?
波斯汪

TA贡献1527条经验 获得超4个赞

匿名函数参数i和j是 中的索引inds,但程序使用参数作为 中的索引nums。


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


sort.Slice(inds, func(i, j int) bool {

    return nums[inds[i]] > nums[inds[j]]

})


查看完整回答
反对 回复 5天前

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信