变量定义:
unordered_map<string,long> _mapTaskCtime = {};
_mapTaskCtime.insert({"yy",2});
_mapTaskCtime.insert({"xx",1});
_mapTaskCtime.insert({"zz",3});
long interval = 0;
方法1: for循环方式一定要注意
auto it = _mapTaskCtime.cbegin();
for( ;it!=_mapTaskCtime.cend(); )
{
if(time(NULL) - it->second >= interval )
{
// erase的返回值是指向被删除元素的后继元素的迭代器
it = _mapTaskCtime.erase(it); // 或 _mapTaskCtime.erase(it++);
} else {
it++;
}
}
方法2:
auto it = _mapTaskCtime.cbegin();
while(it!=_mapTaskCtime.cend())
{
if(time(NULL) - it->second >= interval )
{
// erase的返回值是指向被删除元素的后继元素的迭代器
it = _mapTaskCtime.erase(it); // 或 _mapTaskCtime.erase(it++);
} else {
it++;
}
}
方法3(建议数据量小时用):
reset:
for(auto ele: _mapTaskCtime)
{
if ( time(0) - ele.second >= interval )
{
_mapTaskCtime.erase(ele.first);
goto reset;
}
}
方法4:
vector<string> del_keys = {};
for(auto ele: _mapTaskCtime)
{
if ( time(NULL) - ele.second >= interval )
{
del_keys.emplace_back(ele.first);
}
}
for (auto key : del_keys)
{
_mapTaskCtime.erase(key);
}