STL Composite Key Map

目标:需要为函数的定义建立一个map,特殊之处在于这个map是multikey的,一个string的namespace uri,一个string的name,一个unsigned int的argument size。用伪语言写起来应该是这样的:

map < (namespace uri, name, arg size), function definition pointer> functionMap;


1、首先我想到的解决方案是使用boost的multi index container来做这件事,于是我参考了如下两篇文章:

文章一:http://blog.csdn.net/gongxinheng/article/details/5421914

文章二:http://blog.csdn.net/livelylittlefish/article/details/6098912 (这篇文章专门介绍了组合查询,更为贴合我的任务)

在参考了第二篇文章后我发现其实最后的map还是一个single key的map,只不过key本身是一个composite key。所以我放弃了使用Boost库的念头。


2、所以我本身要用的只是针对一个composite key做map,接下来我参考了下面这篇文章:

http://stackoverflow.com/questions/10276358/std-map-composite-key

这篇帖子提供了一篇关于composite key的更为详细的描述:http://cnx.org/content/m35767/latest/,提供了另外一种实现的方式,在对象已经拥有了compare less operator的情况下使用起来更方便,值得一看。


3、所以我最后得到的是这么个东西:

  class FunctionDefnKey {
  public:
    string uri_;
    string name_;
    unsigned int argSize_;

    FunctionDefnKey(string uri, string name, unsigned int argSize)
      : uri_(uri), name_(name), argSize_(argSize) {}

    friend bool operator<(const FunctionDefnKey& mk1, const FunctionDefnKey& mk2) {
      if (mk1.uri_ != mk2.uri_ ) {
        return mk1.uri_ < mk2.uri_;
      } else if ( mk1.name_ != mk2.name_) {
        return mk1.name_ < mk2.name_;
      } else {
        return mk1.argSize_ < mk2.argSize_;
      }
    }

    map< FunctionDefnKey, FunctionDefn* > externFuncMap_;
  };

这要比使用boost来的简单易懂多了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值