shzuoxinyu93 2015-12-08 17:22 采纳率: 33.3%
浏览 1402

大神帮忙解决一下这个问题

以下代码实现功能:
1.在即时通讯软件中,一般都有"好友列表"功能,好友上限假定为5000
2.每个好友的数据结构为:用户唯一标识、用户账号、用户名称、用户在线状态
3.好友列表使用std::list作为数据容器
4.列表中实现了好友列表排序功能,排序

在代码实现中,当用户在线状态与用户昵称均相同的情况下,对应的数据节点在friendList中相对位置不稳定。例如A,B1,B2, C, D这5个好友用户,排序优先级为A > B1 = B2 > C > D,即B1,B2的在线状态与用户昵称均相同,每次排序后B1,B2的位置会互换。
修改上述代码来实现相同排序优先级的元素,在每次排序后位置保持相对稳定,例如B1始终排在B2前面,或B1始终排在B2后面。

 struct tFriendData
{
    unsigned int uUserID;       // 用户唯一标识
    unsigned char uStatus;      // 用户在线状态: 0表示离线, 1表示在线
    std::string strUserNickname;// 用户昵称
};

static bool FriendSortFunc(tFriendData* pFriend1, tFriendData* pFriend2)
{
    if (!pFriend1 || !pFriend2)
    {
        return pFriend1 ? true : false;
    }

    if (pFriend1->uStatus > pFriend2->uStatus)
    {
        return true;
    }

    if (pFriend1->uStatus < pFriend2->uStatus)
    {
        return false;
    }

    int nRet = _stricmp(pFriend1->strUserNickname.c_str(), pFriend2->strUserNickname.c_str());
    if (nRet < 0)
    {
        return true;
    }
    else if (nRet > 0)
    {
        return false;
    }

    return false;
}

int main(int argc, char *argv[])
{
    std::list<tFriendData*> listFriend;

    // ...

    listFriend.sort(FriendSortFunc);

    // ...

    return 0;
}

  • 写回答

1条回答 默认 最新

  • devmiao 2015-12-08 19:52
    关注

    加上一个排序顺序码,排序的时候作为参照即可

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题