如果我想從地圖中刪除單個元素(除了可能的錯誤檢查,我不關心返回值),我可以通過以下兩種方法實現:鍵erase
或值erase
:map :: erase:按鍵或迭代器擦除的區別?
#include <iostream>
#include <map>
using namespace std;
void printMap(const std::map<int, double>& m)
{
for (auto kv : m)
{
std::cout << '{' << kv.first << ", " << kv.second << '}';
}
std::cout << '\n';
}
int main() {
std::cout << "erase by iterator:\n";
std::map<int, double> m1 = { { 1, 1.1 }, { 2, 2.2 }, { 3, 3.3 } };
printMap(m1);
m1.erase(m1.find(2));
printMap(m1);
std::cout << "erase by key:\n";
std::map<int, double> m2 = { { 1, 1.1 }, { 2, 2.2 }, { 3, 3.3 } };
printMap(m2);
m2.erase(2);
printMap(m2);
return 0;
}
輸出:
erase by iterator:
{1, 1.1}{2, 2.2}{3, 3.3}
{1, 1.1}{3, 3.3}
erase by key:
{1, 1.1}{2, 2.2}{3, 3.3}
{1, 1.1}{3, 3.3}
是兩種方法完全等價,或是否有任何PRAC tical理由或情況,我可能比其他更喜歡一個嗎?
擦除通過迭代器應該是稍微快一點,因爲它並沒有走在樹尋找鑰匙第一的位置。 – Brian