| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 784 人关注过本帖, 1 人收藏
标题:请教C++几个简单问题怎么实现,谢谢!
只看楼主 加入收藏
cwjl11
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-9
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:6 
请教C++几个简单问题怎么实现,谢谢!
大家好:
    一直都没写过c++,现在有几个需求请教大家,
1.我有2个文件,A文件记录用户ID和IP地址,B文件记录IP段和省份。
例如
A文件 /opt/a.txt
1111    192.168.1.1
2222    192.168.10.2
3333    192.168.30.4

B文件 /opt/b.txt
192.168.0.0    192.168.10.0    bsd
192.168.10.1    192.168.20.0    shiw
192.168.20.1    192.168.30.0    sich

文件内容都是以tab键分割,回车换行。

我现在想要对A文件每次读取一行,在B文件中查找属于哪个IP段内,将后面的省份找取出来,最后将A文件每一行和省份传递给emit函数
emit(start, i-start, "1", 1);
emit函数第一个参数是A文件行的首地址,第二个参数是A文件这一行的长度,第三个参数是省份(其实应该是省份的首地址),第四个参数是省份长度。
还请大家多多指教,还请多加注释。不胜感激。。
搜索更多相关主题的帖子: 用户 记录 IP地址 
2013-06-07 10:46
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:7 
又来个作业

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-07 11:26
cwjl11
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-9
收藏
得分:0 
回复 2楼 peach5460
不是作业啊。。是想用C++在map里实现两个表的关联查询,join,left join,当然如果谁能知道怎么实现hash join就好了。还有就是如果能实现假如这2个文件很大。只在map实现文件分发,在reduce中实现join就更好了。
2013-06-07 12:57
老疙瘩
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2013-6-8
收藏
得分:7 
一看就说人家是作业 是不是这是你老人家出的呀
2013-06-08 09:12
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用老疙瘩在2013-6-8 09:12:52的发言:

一看就说人家是作业 是不是这是你老人家出的呀

一眼望去,只有题目,没有分析,末尾来一句要代码
在我看来全是作业...

而且,末尾,求代码,还限定死了调用函数的参数列表,更坚定了我对作业的理解
肯定又是哪个老师出的填空题...

[ 本帖最后由 peach5460 于 2013-6-8 09:28 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-08 09:27
cwjl11
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-9
收藏
得分:0 
回复 5楼 peach5460
最后限定传给固定的函数是因为mapreduce框架就是这样,我工作内容一直都是和数据库打交道,即使现在在hadoop平台上也是用的hive,只是现在有个hive语句实现不等值join很慢,想着用mapreduce来实现,因为不懂c++,只好把需求写清楚点了。希望有人能帮忙解决下而已。
2013-06-08 13:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
写得很烂(不是谦虚),你参考一下吧
程序代码:
#include <iostream>
#include <fstream>
#include <string>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;

struct iprange
{
    unsigned long ip1, ip2;
    string province;

    explicit iprange( unsigned long ip1_=0, unsigned long ip2_=0, string prvc="" ) : ip1(ip1_), ip2(ip2_), province(prvc)
    {
    }
};

inline bool iprange_sortcomp( const iprange& a, const iprange& b )
{
    return a.ip1 < b.ip1;
}

istream& operator>>( istream& is, iprange& ipr )
{
    unsigned long a,b,c,d, e,f,g,h;
    char ap,bp,cp, ep,fp,gp;
    string province;

    is >> a >> ap >> b >> bp >> c >> cp >> d
       >> e >> ep >> f >> fp >> g >> gp >> h >> province;

    if( is
        && a<256 && ap=='.'&& b<256 && bp=='.' && c<256 && cp=='.' && d<256
        && e<256 && ep=='.'&& f<256 && fp=='.' && g<256 && gp=='.' && h<256 )
    {
        ipr.ip1 = a<<24 | b<<16 | c<<8 | d;
        ipr.ip2 = e<<24 | f<<16 | g<<8 | h;
        ipr.province = province;
    }
    return is;
}


int main()
{

    ifstream fa( "a.txt" );
    ifstream fb( "b.txt" );
    if( !fa || !fb )
        return 1;

    vector<iprange> iprs( (std::istream_iterator<iprange>(fb)), std::istream_iterator<iprange>() );
    sort( iprs.begin(), iprs.end(), &iprange_sortcomp );

    while( fa )
    {
        string id;
        unsigned long a,b,c,d;
        char ap,bp,cp;

        fa >> id >> a >> ap >> b >> bp >> c >> cp >> d;
        if( !fa || a>255 || ap!='.' || b>255 || bp!='.' || c>255 || cp!='.' || d>255 )
            break;

        unsigned long ip = a<<24 | b<<16 | c<<8 | d;

        cout << id << '\t'
             << a << '.' << b << '.' << c << '.' << d << '\t';

        if( ip>=iprs.back().ip1 && ip<=iprs.back().ip2 )
        {
            cout << iprs.back().province << '\n';
        }
        else
        {
            vector<iprange>::const_iterator itor = upper_bound( iprs.begin(), iprs.end(), iprange(ip), &iprange_sortcomp );
            if( itor!=iprs.begin() && itor!=iprs.end() && itor->ip2>=ip )
                cout << (--itor)->province << '\n';
            else
                cout << "???" << '\n';
        }
    }

    return 0;

}

2013-06-08 15:53
快速回复:请教C++几个简单问题怎么实现,谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013141 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved