| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 426 人关注过本帖
标题:以下代码对stl容器DataMap进行了多少次搜索
只看楼主 加入收藏
哆啦安梦
Rank: 2
来 自:哈尔滨理工大学软件
等 级:论坛游民
威 望:1
帖 子:31
专家分:49
注 册:2011-10-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
以下代码对stl容器DataMap进行了多少次搜索
程序代码:
struct Data{
    Data():value(0){}
    int value;
}

std::map<int, Data> DataMap;

void RemoveData(int key){
    assert(DataMap.empty() == false);
    if(DataMap[key].value > 0)
        --DataMap[key].value;
    if(DataMap[key].value == 0)
        DataMap.erase(key);
}
2015-01-06 10:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
主要看 RemoveData 函数

程序代码:
#include <iostream>
#include <map>

struct Data
{
    explicit Data( int val=0 ) : value(val)
    {
    }
    int value;
};

typedef std::map<int,Data> TDataMap;

void RemoveData( TDataMap& dm, int key )
{
    TDataMap::iterator itor = dm.find(key);
    if( itor != dm.end() )
    {
        if( itor->second.value > 1 )
            --(itor->second.value);
        else
            dm.erase( itor );
    }
}

int main()
{
    TDataMap datamap;
    datamap.insert( std::make_pair(0,Data(0)) );
    datamap.insert( std::make_pair(1,Data(1)) );
    datamap.insert( std::make_pair(2,Data(2)) );
    datamap.insert( std::make_pair(3,Data(3)) );

    RemoveData( datamap, 0 );
    RemoveData( datamap, 1 );
    RemoveData( datamap, 2 );
    RemoveData( datamap, 3 );

    for( TDataMap::const_iterator itor=datamap.begin(); itor!=datamap.end(); ++itor )
        std::cout << itor->first << " : " << itor->second.value << '\n';

    return 0;
}

2015-01-06 10:56
哆啦安梦
Rank: 2
来 自:哈尔滨理工大学软件
等 级:论坛游民
威 望:1
帖 子:31
专家分:49
注 册:2011-10-21
收藏
得分:0 
回复 2楼 rjsp
表示这是网易的一道笔试题,然后后面还有一道题让编写代码减少这个函数的搜索次数,你让我看RemoveData的函数看起来像搜索了1次的样子?原谅我只是个初学者……

Press any key to continue_
2015-01-06 23:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
void RemoveData(int key){
    assert(DataMap.empty() == false);
    if(DataMap[key].value > 0) // DataMap[key]需要搜索一次,且如果key不存在,执行一次插入
        --DataMap[key].value; // DataMap[key]又需要搜索一次
    if(DataMap[key].value == 0) // DataMap[key]还是要需要搜索一次
        DataMap.erase(key); // DataMap[key]最后搜索一次,一共搜索了4次
}

而我给你写的代码中,只搜索了一次。
2015-01-07 08:17
哆啦安梦
Rank: 2
来 自:哈尔滨理工大学软件
等 级:论坛游民
威 望:1
帖 子:31
专家分:49
注 册:2011-10-21
收藏
得分:0 
回复 4楼 rjsp
哦,谢谢,那你是把后面那道题解答啦~~点赞!!

Press any key to continue_
2015-01-07 21:57
快速回复:以下代码对stl容器DataMap进行了多少次搜索
数据加载中...
 
   



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

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