• 好友列表的实现


         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中。

         以下是一个简单的测试:

  • 相关阅读:
    部署Packbeat--Elastic Stack之十
    部署Winlogbeat--Elastic Stack之九
    解决git clone pull push慢必杀技
    Android内存泄露分析及内存管理小记
    android 8.0以后(sdk26)启动前台服务的问题探究
    打包编译.so流程
    AS升级编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.
    三层fragment嵌套,接口回调方式
    recyclerview的onBindViewHolder中if之后要写else,否则可能显示有问题
    2018
  • 原文地址:https://www.cnblogs.com/shakin/p/3714902.html
Copyright © 2020-2023  润新知