#include <stdio.h>
#include <string.h>
class CPerson
{
public:
char* m_pszName; //名前
int m_nAge; //年齢
CPerson(char*, int);
CPerson(){m_pszName = NULL; m_nAge = 0;}
~CPerson(){if(m_pszName) delete[] m_pszName;}
CPerson(CPerson&);
CPerson& operator=(CPerson&);
};
CPerson::CPerson(char* pszName, int nAge)
{
m_pszName = new char[strlen(pszName) + 1];
strcpy(m_pszName, pszName);
m_nAge = nAge;
}
CPerson::CPerson(CPerson& p)
{
m_pszName = new char[strlen(p.m_pszName) + 1];
strcpy(m_pszName, p.m_pszName);
m_nAge = p.m_nAge;
}
CPerson& CPerson::operator=(CPerson& p)
{
if(m_pszName) delete[] m_pszName;
m_pszName = new char[strlen(p.m_pszName) + 1];
strcpy(m_pszName, p.m_pszName);
m_nAge = p.m_nAge;
return *this;
}
bool operator<(CPerson& p1, CPerson& p2)
{
int nRet = strcmp(p1.m_pszName, p2.m_pszName);
if(nRet == 0) return p1.m_nAge < p2.m_nAge;
else return nRet < 0;
}
template<class TYPE> void Sort(TYPE a[], int n)
{
int i, j;
for(i = 1; i < n; i++){
j = i;
while(j > 0 && a[j] < a[j-1]){
Swap(a[j], a[j-1]);
j--;
}
}
}
template<class TYPE> void Swap(TYPE& a, TYPE& b)
{
TYPE tmp = a;
a = b;
b = tmp;
}
int main()
{
CPerson a[10];
char* b[10] = {"yamazaki", "taniguchi", "hashimoto", "inoue", "yamada",
"nishimoto", "aoki", "imai", "nishiwaki", "aoki"};
int c[10] = {45, 25, 38, 53, 68, 42, 18, 27, 62, 35};
for(int i = 0; i < 10; i++){
a[i].m_pszName = new char[strlen(b[i]) + 1];
strcpy(a[i].m_pszName, b[i]);
a[i].m_nAge = c[i];
}
Sort(a, 10);
for(int i = 0; i< 10; i++)
printf("%-10s %d\n", a[i], b[i]);
return 0;
}
実行結果
aoki 18
aoki 35
hashimoto 38
imai 27
inoue 53
nishimoto 42
nishiwaki 62
taniguchi 25
yamada 68
yamazaki 45