[英]Maps and sets please explain why this code has the output
地圖和集合請解釋為什么這段代碼有 output 我特別困惑什么 m[x] ++ 和輸出 3:0 我的理解是集合是 (0,1,2,2,4,4)和米。 insert(key,value) 會記錄 map (0,2,4,4,8,8) 這將使 output 0:0 1:2 2:4 3:4 4:8 請告訴我為什么這是不正確的.
set < int > s ;
map < int , int > m ;
s.insert (0);
s.insert (4);
s.insert (2);
s.insert (4);
s.insert (1);
s.insert (2);
for ( int x : s ) {
if ( m.count ( x ) == 0) {
m.insert ({ x , x * 2});
} else {
m [ x ]++;
}
}
for ( int i = 0; i < 5; i ++) {
cout << i << ": " << m [ i ] << endl ;
}
實際 output:
0: 0
1:2
2:4
3:0 4:8
讓我們將您的代碼分成多個部分。
set < int > s ;
map < int , int > m ;
s.insert (0);
s.insert (4);
s.insert (2);
s.insert (4);
s.insert (1);
s.insert (2);
首先,您用 integer 填充一個集合。由於 std::set 保證唯一性和順序,您的集合包含值{0, 1, 2, 4}
。
for ( int x : s ) {
if ( m.count ( x ) == 0) {
m.insert ({ x , x * 2});
} else {
m [ x ]++;
}
}
現在,對於集合中的每個唯一值,您正在查看 map 上是否存在以該值作為鍵的條目。 由於您的 map 一開始是空的,因此您將始終通過此測試,而 else 部分永遠不會通過 go。
因此,您的 map 包含{[0: 0], [1: 2], [2: 4], [4: 8]}
如果您使用向量而不是集合,則某些值會重復,您的 map 將改為: {[0: 0], [1: 2], [2: 5], [4: 9]}
for ( int i = 0; i < 5; i ++) {
cout << i << ": " << m [ i ] << endl ;
}
最后,您在終端上打印 map 的內容。 等等,您的 map 不包含鍵3
的值! 通過使用運算符[] ( https://en.cppreference.com/w/cpp/container/map/operator_at ),您已經在 map 中插入了一個默認值為 0 的值。
您應該使用方法at() ( https://en.cppreference.com/w/cpp/container/map/at ) 來檢查此 map 中是否存在元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.