Я хочу отсортировать фрагмент с именем 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]]
})