三重的排序該怎麼寫?该怎么解决

三重的排序該怎麼寫?
我要寫一段程式來整理資料,因我是初學者想不到什麼方法?可以給我一個方向,謝謝
檔案大約如下

公司    部門     編碼
A       K       55
c       K       11
B       Z       80
A       Y       22
B       Y       65

整理後 匯出

公司    部門     編碼
A       Y       22
A       K       55
B       Y       65
B       Z       80
c       K       11

排列方式
1.先把公司整理出來由A~C
2.再整理該公司的部門 K~Z
3.再把該部門的編碼由小到大排序

請問這樣怎麼寫比較好
我有想過就硬拆,用struct
typedef struct Company
{
  CString dep;
  int data;
};
先讀資料後,
Company A[100], B[100], C[100] ;
//公司分類
switch(讀的公司){
case 'A':
   A[i].dep= 讀到部門;
   A[i].data= 讀到編碼;
   ++i;
   break;
case 'B':
   B[j].dep= 讀到部門;
   B[j].data= 讀到編碼;
   ++j;
   break;
case 'C':
......}

//部門分類
switch(A[i].dep){
case 'K':
      dataK[h]=A[i].data;
   ++i;
   ++h;
   break;
case 'Z':
   dataZ[n]=B[j].data;
   ++j;
   ++n;
   break;
case 'Y':
......}

然後再一個個印出來

可是這方法,不太好,可我想不出其他方法了?請還有其他方法整理嗎?
------解决方案--------------------

struct data
{
  CString comp;
  CString depart;
  int code;
  bool largerdata(data &p)//这个叫谓词
  { 
     if(comp>p.comp)
    {
      return 1;
     }else if(comp>p.comp)
     {  //第二字段 
        if(depart>p.comp)
         { 
             return 1;

           }else if(depart==p.comp)
            {//比较第3字段,自己模仿写

              }else
             {
              return 0;
            }


      }else
      {
        return 0;
      }

   }
}
vector <data> datavec;