Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Isih Data dalam C Sambil Mengekalkan Indeks Asal?

Bagaimanakah Saya Boleh Isih Data dalam C Sambil Mengekalkan Indeks Asal?

Barbara Streisand
Lepaskan: 2024-12-21 16:28:09
asal
472 orang telah melayarinya

How Can I Sort Data in C   While Maintaining Original Indices?

Isih Data sambil Mengekalkan Kedudukan Asal dalam C

Dalam C , keperluan sering timbul untuk mengisih koleksi elemen sambil mengekalkan kedudukan asalnya . Ini penting apabila faktor luaran bergantung pada kedudukan ini.

Pertimbangkan set sampel A = [5, 2, 1, 4, 3]. Isih set ini menggunakan fungsi isihan standard akan menghasilkan B = [1,2,3,4,5]. Walau bagaimanapun, kami juga ingin menjejaki indeks asal unsur yang diisih, menghasilkan set C = [2, 1, 4, 3, 0], yang menunjukkan indeks setiap elemen dalam B dalam A asal.

Penyelesaian menggunakan C 11 Lambdas

C 11 lambdas menyediakan cara yang mudah untuk menyelesaikan masalah ini masalah:

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

using namespace std;

template <typename T>
vector<size_t> sort_indexes(const vector<T> &amp;v) {
  // Initialize original index locations
  vector<size_t> idx(v.size());
  iota(idx.begin(), idx.end(), 0);

  // Sort indexes based on comparing values in v
  stable_sort(idx.begin(), idx.end(),
       [&amp;v](size_t i1, size_t i2) {return v[i1] < v[i2];});

  return idx;
}
Salin selepas log masuk

Dalam pelaksanaan ini, kami mula-mula mencipta idx vektor dengan indeks asal. Kami kemudian mengisih indeks menggunakan stable_sort, memastikan elemen dengan nilai yang sama mengekalkan susunan relatifnya. Idx vektor yang terhasil mengandungi indeks yang diisih.

Penggunaan

Untuk menggunakan fungsi ini, cuma masukkan vektor nilai anda dan ulangi indeks yang diisih:

for (auto i: sort_indexes(v)) {
  cout << v[i] << endl;
}
Salin selepas log masuk

Penyesuaian

Penyesuaian fungsi sort_indexes boleh disesuaikan untuk memenuhi keperluan khusus anda. Sebagai contoh, anda boleh menyediakan vektor indeks asal anda sendiri, membekalkan fungsi isihan tersuai atau pembanding, atau menyusun semula v semasa mengisih menggunakan vektor tambahan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Isih Data dalam C Sambil Mengekalkan Indeks Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan