zoukankan      html  css  js  c++  java
  • 好友列表的实现

         STL这个东西,真是既让人恨,又让人爱;恨得是他的语法太繁琐(基本上很多时候要用到的时候,都要翻阅资料,他的语法真是难记),爱的是他的功能确实很强大,然而,就我个人而言,任然是爱大与恨,呵呵...如果在程序中合理地结合了STL容器和算法,而不是从头到尾都自行编写和调试自己的版本,就能节省大量的时间和精力。

          多数在线聊天程序中,允许用户有一个“好友列表”或朋友列表。一直想知道,到底如何能够做一个有这样功能的东西呢 ? 怎样简洁高效的做得呢 ?参考Nicholas A.Solter的Professional C++,终于找到了捷径。

          聊天程序会对好友列表中列出的用户授予特权,如允许他们向用户发送主动消息。为在线聊天程序实现好友列表的一种方法是把信息存储在一个multimap中。一个multimap可以存储所有用户的好友列表。容器中的每一项存储对应一个用户的好友。键是用户,值是好友。例如,如果,我和我的一个朋友之一,就拿辉哥来说吧,我们都在对方的好友列表中,那么就会有形式如下的两项,“shajin”映射至”辉哥“,而”辉哥“映射至“shajin”。multimap允许同一个键有多个值,因此一个用户可以有多个好友,以下是BuddyList类定义:

        以下是实现,它展示了lower_bound()、upper_bound()和equal_range()的使用(没办法,STL中就这么命名,其实我也一点儿都不喜欢这种方式):

         这样,就差不多了,但是,要注意,removeBuddy()不能只是使用“完全删除”版本的erase(),即把有给定键的所有元素都删除,因为它应当只删除有给定键的一个元素,而不是全部。还有,getBuddies()不能使用list的insert()在equal_range()返回的区间内插入元素,因为multimap iterator指示的元素是键/值对,而不是string。getBuddies()必须显示地迭代处理list,从各个键/值对抽出string,并将其压入到待返回的新list中。

         以下是一个简单的测试:

  • 相关阅读:
    shell28获取命令结果的第几个参数
    在 Amazon EC2 Linux 实例上手动安装 SSM 代理 Raspbian
    Trying out the Intel Neural Compute Stick 2 – Movidius NCS2
    Flask
    virtualenv/venv 和 pip
    轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
    向 AWS Elastic Beanstalk 部署 Flask 应用程序
    Installing the AWS Toolkit for Visual Studio Code
    Installing the AWS SAM CLI on macOS
    树莓派显示器电源管理禁止屏幕休眠
  • 原文地址:https://www.cnblogs.com/shakin/p/3714902.html
Copyright © 2011-2022 走看看