好友列表的实现

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

     以下是一个简单的测试:

 

posted @ 2009-05-09 00:55  rlandj  阅读(353)  评论(0编辑  收藏  举报