本篇將介紹如何使用 C++ map 刪除元素的 3 種方式,刪除 map 的元素有 3 種方式,
分別是
- map 刪除指定的元素
- map 刪除迭代器 iterator 指向的元素
- map 刪除範圍內的元素
那就開始來介紹吧!
map 刪除指定的元素
C++ map 根據傳入的 key 值去刪除該元素,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// g++ std-map-erase.cpp -o a.out -std=c++11
int main() {
std::map<int, std::string> studentMap;
studentMap[1] = "Tom";
studentMap[3] = "John";
studentMap[5] = "Tiffany";
studentMap.erase(1);
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
return 0;
}
結果如下,1
23 John
5 Tiffany
那如果 map 刪除不存在的元素會發生什麼事呢?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25// g++ std-map-erase2.cpp -o a.out -std=c++11
int main() {
std::map<int, std::string> studentMap;
studentMap[1] = "Tom";
studentMap[3] = "John";
studentMap[5] = "Tiffany";
auto ret = studentMap.erase(1);
std::cout << ret << "\n";
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
ret = studentMap.erase(2);
std::cout << ret << "\n";
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
return 0;
}
map 刪除不存在的元素並不會造成什麼 crash 這種嚴重問題,他反而會回傳一個數量告訴你它刪除了多少個元素,以這個例子來說 erase(1)
是刪除了 1 個元素,erase(2)
是刪除了 0 個元素,結果如下,1
2
3
4
5
61
3 John
5 Tiffany
0
3 John
5 Tiffany
erase()
回傳的是 size_type,實際上是什麼變數型態,可以利用這篇的技巧來印出變數型態。
map 刪除迭代器 iterator 指向的元素
C++ map 根據帶入的 iterator 迭代器去刪除該元素,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// g++ std-map-erase3.cpp -o a.out -std=c++11
int main() {
std::map<int, std::string> studentMap;
studentMap[1] = "Tom";
studentMap[3] = "John";
studentMap[5] = "Tiffany";
std::map<int, std::string>::iterator it;
it = studentMap.find(3);
studentMap.erase(it);
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
return 0;
}
輸出結果如下,1
21 Tom
5 Tiffany
來看看另外一種 map 的例子,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// g++ std-map-erase4.cpp -o a.out -std=c++11
int main() {
std::map<std::string, int> studentMap;
studentMap["Tom"] = 1;
studentMap["John"] = 3;
studentMap["Tiffany"] = 5;
std::map<std::string, int>::iterator it;
it = studentMap.find("John");
studentMap.erase(it);
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
return 0;
}
輸出結果如下,1
2Tiffany 5
Tom 1
map 刪除範圍內的元素
C++ map 根據帶入兩個 iterator 迭代器的範圍去刪除,這邊先用 find 來找好要刪除範圍的第一個 iter 與最後一個 iter,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29// g++ std-map-erase5.cpp -o a.out -std=c++11
int main() {
std::map<int, std::string> studentMap;
studentMap[1] = "Tom";
studentMap[2] = "Jack";
studentMap[3] = "John";
studentMap[4] = "Ann";
studentMap[5] = "Tiffany";
std::map<int, std::string>::iterator first = studentMap.find(2);
std::map<int, std::string>::iterator last = studentMap.find(4);
studentMap.erase(first, last);
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
std::cout << "---\n";
studentMap.erase(studentMap.begin(), studentMap.end());
for (const auto& m : studentMap) {
std::cout << m.first << " " << m.second << "\n";
}
return 0;
}
結果如下,1
2
3
41 Tom
4 Ann
5 Tiffany
---
如果要刪除所有的元素的話可以用 clear()
,或者指定頭 begin()
到尾 end()
也可以,用法如下,1
studentMap.erase(studentMap.begin(), studentMap.end());
其它參考
map::erase - C++ Reference
http://www.cplusplus.com/reference/map/map/erase/
其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
std::map 用法與範例
std::unordered_map 用法與範例
std::vector 用法與範例
std::deque 介紹與用法
std::queue 用法與範例
std::thread 用法與範例
std::mutex 用法與範例
std::find 用法與範例
std::sort 用法與範例
std::random_shuffle 產生不重複的隨機亂數
std::shared_ptr 用法與範例
std::async 用法與範例