我想從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