为什么在 Go 和 C++ 中对函数进行排序是不同的?而且我在围棋中无法获得正确的结果



我想在不破坏原始顺序的情况下对名为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]]
})

最新更新