SORU
16 EKİM 2009, Cuma


C sıralama ve dizinleri takip

C , ve standart kütüphane umarım kullanarak, artan düzende örnekleri bir dizi sıralamak istiyorum, ama aynı zamanda yeni örneklerinin orijinal dizinler hatırlamak istiyorum.

Örneğin, bir set, ya vektör ya da matris örnekleri A : [5, 2, 1, 4, 3] var. B : [1,2,3,4,5], ama aynı zamanda değerleri orijinal dizinler hatırlamak istiyorum bu sıralamak istiyorum, başka bir set alabilirsiniz: Her öğe dizini karşılık gelen C : [2, 1, 4, 3, 0 ] - 'B', özgün 'Bir'.

Örneğin turkce yapabilirsiniz:

 [a,b]=sort([5, 8, 7])
 a = 5 7 8
 b = 1 3 2

Herkes bunu yapmak için iyi bir yol olabilir mi?

CEVAP
13 EYLÜL 2012, PERŞEMBE


C 11 Lambda kullanarak

template <typename T>
vector<size_t> sort_indexes(const vector<T> &v) {

  // initialize original index locations
  vector<size_t> idx(v.size());
  for (size_t i = 0; i != idx.size();   i) idx[i] = i;

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

  return idx;
}

Şimdi tekrar döndü dizin vektör gibi kullanabilirsiniz

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

Belli ki, ayrıca dizin vektör, sıralama işlevi, karşılaştırıcı, veya otomatik olarak yeniden sort_indexes işlevi v kendi özgün fazladan bir vektör kullanarak tedarik seçebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • emimusic

    emimusic

    10 Mart 2006
  • Kassem G

    Kassem G

    25 EKİM 2006
  • kremosakhaz

    kremosakhaz

    25 AĞUSTOS 2006