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

以下代码实现功能:
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;
}

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