为什么 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;
}
排序后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]]
})
我想对名为 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]]
})