高效的使用stl::map和std::set

本文深入探讨了使用Map容器时的低效用法,并提供了改进策略,通过合理利用insert和erase的返回值来降低find操作的频率,从而优化内存管理和提升程序性能。关键在于减少不必要的find调用,特别是在处理元素存在与否的判断时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、低效率的用法
// 先查找是否存在,如果不存在,则插入
if (map.find(X) == map::end()) // 需要find一次
{
    map.insert(x); // 需要find一次
}
// 下面这段代码是一个意思
if (0 == map.count(X) // 需要find一次
{
    map.insert(x); // 需要find一次
}

// 或者是先判断是否存在,如果不存在则插入,反之如果存在则修改
if (map.count(X) > 0) // 需要find一次
{
    map.erase(X); // 需要find一次
}
map.insert(x); // 需要find一次

// 对于erase存在同样低效的用法
if (map.count(X) > 0) // 需要find一次
{
    map.erase(X); // 需要find一次
}
else
{
    // 不存在时的处理
}

2、高效率的用法
// 解决办法,充分利用insert和erase的返回值,将find次数降为1
map::size_type num_erased = map.erase(X); // 需要find一次
if (0 == num_erased)
{
    // 不存在时的处理
}
else
{
    // 存在且删除后的处理
}

pair<map::iterator, bool> result_inserted;
result_inserted = map.insert(X);
if (result_inserted.second)
{
    // 不存在,插入成功后的处理
}
else
{
    // 已经存在,插入失败后的处理
    result_inserted.first->second = X; // 修改为新值 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值