我有一个看起来像这样的结构:
struct MyStruct {
int a[9];
int index[9];
}
我希望根据数组'a'的值对此结构进行排序,并使数组'index'的对应值自动调整为相同。
请指导我如何为这样的结构编写比较函数。
编辑:我希望使用内置排序函数(如qsort
或sort
)对此结构进行排序,方法是传递此结构并使用自定义比较函数根据结构对结构进行排序到数组'a'的值。这将有助于我学习如何使用这样的比较函数,从而具体请求。
答案 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;
}
使用sort
或std::swap
代替本地可见的std::swap_iter
。
你必须自己排序,因为我所知道的所有种类只有swap
而不是cmp
作为参数。