map<QString, bool> 的使用记录

我在应用中的例子如下:

map<QString, bool> m_allSkakFilepath;


auto itpath = m_allSkakFilepath.find(skaPaths.at(n).c_str());
if (itpath !=m_allSkakFilepath.end())
{
	m_allSkakFilepath[skaPaths.at(n).c_str()] = false;
}
else
{
	m_allSkakFilepath[skaPaths.at(n).c_str()] = true;
}

此map主要应用场合:

   一般是有很多文件。并需要查找文件是否有效,要不被用过,如果用过则标志位做为true,也可用在很多组件是否被使用过,总之不管在什么场合,就是为了查找方便

     以上那段代码是添加删除,map的好处是,主要上面的key值没有在map中,直接给值就会增加一个key值

下面再给出一段遍历删除的代码,以下代码为删除map中值为true,结合上面那段的意义就是用过的值全部清除记得清清后iter++:

map<QString, bool>::iterator iter=m_allSkakFilepath.begin();
for(;iter!=m_allSkakFilepath.end();){
	if((*iter).second==true){
		m_allSkakFilepath.erase(iter++);
	}
	else{
		++iter;
	}
} 

map的清除操作:

//清除方式1:直接将map删除了
m_allSkakFilepath.clear();   
//map.clear()只是把map清空了,但是内存没有释放,如果要释放内存不止是要clear()掉,还要和一个空的map来进行swap,将内存释放
//注意map中如果元素不是基本类型,也要进行内存释放,如指针,vector要尤其注意,否则map占的内存太大,会造成程序崩溃



//清除方式2用map.erase(map.begin(),map.end())比较好  清空元素
m_allSkakFilepath.erase(m_allSkakFilepath.begin(),m_allSkakFilepath.end());

//清除方式3
map<QString, bool> empty_map1;
m_allSkakFilepath.swap(empty_map1);

输出map大小 

输出map大小 
int nsize=m_allSkakFilepath.size();

map的排序说明:map本身默认按照key值升序排序,个人觉得够用了
如果你想倒序遍历可参考如下(用reverse_iterator指针):

 for( map<QString, bool>::reverse_iterator rit=m_allSkakFilepath.rbegin();rit!=m_allSkakFilepath.rend();rit++) 
    cout<<(*rit).first<<","<<(*rit).second<<endl;  

修改map中的值,修改比较简单,只要在其中的key设成相应的值便可以了,如下:直接设置key3从false变成true

map<QString, bool> m_allSkakFilepath;
m_allSkakFilepath.insert(("key1", false));
m_allSkakFilepath.insert(("key2", false));
m_allSkakFilepath.insert(("key3", false));
m_allSkakFilepath.insert(("key4", true));

{
    map<QString, bool>::const_iterator iteMap = m_allSkakFilepath.begin();
	cout << "==============旧值结果输出=============" << endl;
    for(; iteMap != m_allSkakFilepath.end(); ++ iteMap)
    {
        cout << m_allSkakFilepath->first;
        cout << ":";
        cout << m_allSkakFilepath->second << endl;
    }
}

//修改
m_allSkakFilepath.insert(("key3", true));


{
    map<QString, bool>::const_iterator iteMap = m_allSkakFilepath.begin();
	cout << "==============新值结果输出=============" << endl;
    for(; iteMap != m_allSkakFilepath.end(); ++ iteMap)
    {
        cout << m_allSkakFilepath->first;
        cout << ":";
        cout << m_allSkakFilepath->second << endl;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值