qsort与bsearch中比较结构体

    技术2022-05-20  25

    #include <stdio.h>#include <stdlib.h>#include <string.h>

    typedef struct{    unsigned int uiUin;    unsigned int uiSeq;} TRoleID;

    TRoleID g_astRoleID[] = {    { 10, 2 }, { 11, 4 }, { 10, 1 }, { 5, 2 }};

    const int g_iRoleNum = (sizeof(g_astRoleID) / sizeof(g_astRoleID[0]));

    int CompareRoleID(const void* pv1, const void* pv2){    TRoleID* pstRoleID1 = (TRoleID *) pv1;    TRoleID* pstRoleID2 = (TRoleID *) pv2;

        // 按照uin从小到大排序,当uin相等时按照seq从小到大排序    if (pstRoleID1->uiUin != pstRoleID2->uiUin)    {        return (pstRoleID1->uiUin - pstRoleID2->uiUin);    }    else    {        return (pstRoleID1->uiSeq - pstRoleID2->uiSeq);    }}

    int main(int argc, char* argv[]){    if (argc != 3)    {        printf("need 2 integer arguments/n");        return -1;    }

        qsort(g_astRoleID, g_iRoleNum, sizeof(TRoleID), CompareRoleID);

        int i;

        for (i = 0; i < g_iRoleNum; i++)    {        printf("uin: %u, seq: %u/n", g_astRoleID[i].uiUin, g_astRoleID[i].uiSeq);    }        TRoleID stKey, *pstRes = NULL;

        stKey.uiUin = atoi(argv[1]);    stKey.uiSeq = atoi(argv[2]);

        pstRes = (TRoleID*) bsearch(&stKey, g_astRoleID, g_iRoleNum,        sizeof(TRoleID), CompareRoleID);

        if (!pstRes)    {        printf("miss/n");    }    else    {        printf("hit/n");    }

        return 0;}

    // g++ t.cpp -o t -g -Wall


    最新回复(0)