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

Bagaimanakah Saya Boleh Mengekalkan Indeks Asal Apabila Mengisih Data dalam C?

Patricia Arquette
Lepaskan: 2024-12-30 18:37:09
asal
401 orang telah melayarinya

How Can I Preserve Original Indexes When Sorting Data in C  ?

Memelihara Indeks Asal Semasa Pengisihan C

Mengisih data sambil mengekalkan indeks asal ialah keperluan biasa dalam tugas manipulasi data. Dalam C , menggunakan perpustakaan standard, tugasan ini merangkumi langkah-langkah berikut:

  1. Permulaan Vektor: Cipta vektor untuk menyimpan nilai data asal dan indeks yang sepadan, dimulakan dengan yang sesuai nilai.
  2. Isih dengan Pemeliharaan Indeks: Gunakan algoritma standard seperti std::stable_sort untuk menyusun data mengikut nilai sambil mengekalkan korelasi antara indeks vektor asal dan diisih.
  3. Mengembalikan Indeks Isih: Ekstrak dan pulangkan vektor yang mengandungi indeks yang diisih, yang mengekalkan susunan elemen asal.
  4. Contoh Aplikasi: Gunakan indeks yang diisih dalam lelaran berikutnya untuk mendapatkan semula data daripada vektor asal dalam susunan yang diubah suai.

Pelaksanaan dalam C 11:

#include <iostream>
#include <vector>
#include <numeric>      // std::iota
#include <algorithm>    // std::sort, std::stable_sort

using namespace std;

template <typename T>
vector<size_t> sort_indexes(const vector<T> &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
  // Using std::stable_sort instead of std::sort
  // to avoid unnecessary index re-orderings
  // when v contains elements of equal values 
  stable_sort(idx.begin(), idx.end(),
       [&v](size_t i1, size_t i2) {return v[i1] < v[i2];});

  return idx;
}
Salin selepas log masuk

Contoh penggunaan :

vector<double> values = {5, 2, 1, 4, 3};
vector<size_t> sorted_indexes = sort_indexes(values);

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Indeks Asal Apabila Mengisih Data dalam C?. 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