加载中…
个人资料
哥本草根
哥本草根
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,065
  • 关注人气:91
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c++取两个map key的并集/交集

(2012-08-29 14:42:58)
标签:

杂谈

分类: 编程技术
其实经常会遇到这个问题,比如说:一个map存了今天的数据,一个map存了昨天数据,现在需要将两天数据对比/作差,等等,也就是想取两个map key的并集/交集,怎么做呢?  很简单,参见下面的代码,利用 map 的key 是排好序的, 我咋就没想到呢:(

template <typename Key, typename Value>
std::map<Key,std::pair<Value,Value> > 
merge_maps( std::map<Key,Value> const & lhs,  std::map<Key,Value> const & rhs )
{
    typedef typename std::map<Key,Value>::const_iterator input_iterator;
    std::map<Key, std::pair<Value,Value> > result;
    for ( input_iterator it1 = lhs.begin(), it2 = rhs.begin(),end1 = lhs.end(), end2 = rhs.end();
            it1 != end1 && it2 != end2; )
    {
          if ( it1->first == it2->first )
          {
                result[it1->first] = std::make_pair( it1->second, it2->second );
                ++it1; ++it2;
          }
          else
          {
                if ( it1->first < it2->first )
                    ++it1;
                else
                    ++it2;
          }
    }
    return result;
}

但是如果对hash 表怎么办呢?比如python里dict, dict里的key是无序的,
I guess 这是一种解决方案: 
for k in (set(dict1) | set(dict2) ):  
      pass; #do something, set(dict1) 直接取的是dict1的keys
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有