对包含两个数组

时间:2015-10-24 14:19:08

标签: c++ arrays sorting

我有一个看起来像这样的结构:

struct MyStruct {
    int a[9];
    int index[9];
}

我希望根据数组'a'的值对此结构进行排序,并使数组'index'的对应值自动调整为相同。

请指导我如何为这样的结构编写比较函数。

编辑:我希望使用内置排序函数(如qsortsort)对此结构进行排序,方法是传递此结构并使用自定义比较函数根据结构对结构进行排序到数组'a'的值。这将有助于我学习如何使用这样的比较函数,从而具体请求。

1 个答案:

答案 0 :(得分:0)

问题是sort使用swap重新排列顺序,交换获取地址以交换指向用于排序的数据,即。 #headerDiv{ position: fixed; background-color:black; text-align: center; overflow:auto } #titleDiv{ width: auto; margin: auto; } #navUL{ list-style-type:none; margin: auto 0; padding:0; border-top:1 solid; border-right:1 solid; border-left:1 solid; width:100%; } #navUL li{ padding: .2em 1em; color: #fff; background-color: #036; display:inline-block; text-align:center; } #titleText{ color:white } 类型的a

所以这是一个解决方案:

int&

它有效!的 NOT !!!

  

之前:9 8 7 6 5 4 3 2 1
  19 18 17 16 15 14 13 12 11
  交换:8 9 7 6 5 4 3 2 1
  18 19 17 16 15 14 13 12 11
  排序后:1 2 3 4 5 6 7 8 9
  18 19 17 16 15 14 13 12 11

所以#include <iostream> #include <iterator> #include <algorithm> static_assert(__cplusplus >= 201103L, "not C++11"); using std::cout; using std::endl; class OhMy { public: int a[9]; int index[9]; OhMy() { int i = 9; for (int& b : a) b = i--; i = 19; for (int& b : index) b = i--; } template <class T> void swap(T& i,T& j) { std::swap(i,j); // dirty pointer arithmetic std::swap(index[std::distance(&a[0],&i)],index[std::distance(&a[0],&j)]); } void sort() { std::sort(std::begin(a),std::end(a)); } void dump() { copy(std::begin(a),std::end(a), std::ostream_iterator<int>(std::cout, " ")); cout << endl; copy(std::begin(index),std::end(index), std::ostream_iterator<int>(std::cout, " ")); cout << endl; } }; int main() { OhMy ohMy; cout << "Before:"; ohMy.dump(); cout << "swap:"; ohMy.swap(ohMy.a[0],ohMy.a[1]); ohMy.dump(); cout << "After sort:"; ohMy.sort(); ohMy.dump(); return 0; } 使用sortstd::swap代替本地可见的std::swap_iter

你必须自己排序,因为我所知道的所有种类只有swap而不是cmp作为参数。