Справочное руководство по C++

B4_6_9.cxx.

#include ‹stream.hxx›

Struct user {

 char *name;

 char* id;

 int dept;

};

Typedef user* Puser;

User heads[] = {

 "Mcilroy M.D", "doug", 11271,

 "Aho A.V.", "ava", 11272,

 "Weinberger P.J.", "pjw", 11273,

 "Schryer N.L.", "nls", 11274,

 "Schryer N.L.", "nls", 11275,

 "Kernighan B.W.", "bwk", 11276.

};

Typedef int (*CFT)(char*,char*);

Void sort(char* base, unsigned n, int sz, CFT cmp).

{

 for (int i=0; i‹n-1; i++).

  for (int j=n-1; i‹j; j--) {

   char* pj = base+j*sz;

   char *pj1 = pj-sz;

   if ((*cmp)(pj,pj1) ‹ 0).

    // swap b[j] and b[j-1].

    for (int k=0; k‹sz; k++) {

     char temp = pj[k];

     pj[k] = pj1[k];

     pj1[k] = temp;

    }

  }

}

Void print_id(Puser v, int n).

{

 for (int i=0; i‹n; i++).

  cout ‹‹ v[i].name ‹‹ "\t".

   ‹‹ v[i].id ‹‹ "\t".

   ‹‹ v[i].dept ‹‹ "\n";

}

Extern int strcmp(char*, char*);

Int cmp1(char* p, char* q).

{

 return strcmp(Puser(p)-›name, Puser(q)-›name);

}

Int cmp2(char* p, char* q).

{

 return Puser(p)-›dept - Puser(q)-›dept;

}

Main ().

{

 sort((char*)heads,6,sizeof(user),cmp1);

 print_id(heads,6);

 cout ‹‹ "\n";

 sort ((char*)heads,6,sizeof(user),cmp2);

 print_id(heads,6); // in department number order.

}