我想从STL地图中删除密钥。但是,map.erase()
不会执行任何操作。 我该怎么去做这个从C++地图中删除密钥
32
A
回答
50
这完全取决于你如何调用它,但听起来像你可能会使用first,last
选项。如果你是,你需要记住,它擦除从first
开始,但不包括last
但。如果遵循该规则,则基于迭代器的删除应该可以正常工作,无论是作为单个元素还是范围。
如果你正在通过密钥擦除,那么它也应该工作,假设密钥在那里。
下面的示例代码显示了运行中的所有三种方法:
#include <iostream>
#include <map>
int main (void) {
std::map<char,char> mymap;
std::map<char,char>::iterator it;
mymap['a'] = 'A'; mymap['b'] = 'B'; mymap['c'] = 'C';
mymap['d'] = 'D'; mymap['e'] = 'E'; mymap['f'] = 'F';
mymap['g'] = 'G'; mymap['h'] = 'H'; mymap['i'] = 'I';
it = mymap.find ('b'); // by iterator (b), leaves acdefghi.
mymap.erase (it);
it = mymap.find ('e'); // by range (e-i), leaves acd.
mymap.erase (it, mymap.end());
mymap.erase ('a'); // by key (a), leaves cd.
mymap.erase ('z'); // invalid key (none), leaves cd.
for (it = mymap.begin(); it != mymap.end(); it++)
std::cout << (*it).first << " => " << (*it).second << '\n';
return 0;
}
,输出:
c => C
d => D
+0
我很遗憾忽略了'const key_type&'的覆盖。感谢您指出! – 2016-07-08 20:56:22
4
你将不得不找到迭代第一
map.erase(ITERATOR) ;
要使这个安全,你需要确保ITERAT或者存在,但是。例如:
#include <stdio.h>
#include <map>
using namespace std ;
int main()
{
map<int,int> m ;
m.insert(make_pair(1,1)) ;
map<int,int>::iterator iter = m.find(1) ;
if(iter != m.end())
m.erase(iter);
else puts("not found") ;
}
相关问题
- 1. 从注册表中删除密钥
- 2. 从JSON响应中删除密钥
- 3. 从密钥中删除扩展名
- 4. 从选择器中删除密钥
- 5. 从关联数组中删除密钥
- 6. 从注册表中删除密钥
- 7. 通过密钥名称从字典中删除密钥
- 8. 删除母密钥
- 9. Mule - 从Groovy组件中的地图中删除给定的密钥
- 10. 从Puppet中的地图过滤密钥
- 11. 地图API密钥
- 12. 如何删除HSTORE密钥?
- 13. 删除密钥绑定
- 14. Node_redis - 如何删除密钥?
- 15. 从地图中删除值
- 16. 从地图中删除mkoverlay
- 17. 如何从新叉中删除密钥/密码?
- 18. 删除cachefactory中的http密钥
- 19. 在redis中,我如何删除密钥?
- 20. 如何删除emberjs中的密钥?
- 21. 如何高效地删除Java中的多个会话密钥?
- 22. 如何从PHP中的JSON中删除密钥?
- 23. 从存储在memcache密钥中的数组中删除值?
- 24. 从父web.config中的子web.config中删除密钥
- 25. 地图的密钥类型
- 26. 尝试使用密钥名称从本地存储中删除项目
- 27. 删除密钥/ val哈希对留下密钥。为什么?
- 28. 删除密钥的值并保留密钥
- 29. 如何从智能卡中删除RSA密钥对
- 30. 从WPF应用程序中删除强名称密钥文件
擦除做些什么。你怎么使用它?什么让你相信它没有做任何事情? – 2012-04-06 04:05:45
map.erase(key)。 – 2012-04-06 04:07:01
对我的第二个问题? – 2012-04-06 04:07:40