[問題] map中的map如何初始化和insert?

看板C_and_CPP作者 (ilove..)時間12年前 (2012/02/08 11:55), 編輯推噓1(1028)
留言29則, 4人參與, 最新討論串1/1
初始一個 typedef map<int,map<int,int>> intMap; intMap m_map; m_map.insert( intMap::value_type( 1,map<int,int>::value_type(2,3) ) ); 請問這樣子的insert和初始化為什麼不允許? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.208.83.246

02/08 12:01, , 1F
用make_pair,map是用pair實作的,你要插入就要pair
02/08 12:01, 1F

02/08 12:04, , 2F
map<int,int>::value_type(2,3) <- 這個東西不是一個
02/08 12:04, 2F

02/08 12:04, , 3F
map<int,int>的constructor
02/08 12:04, 3F

02/08 12:08, , 4F
這啥? 二維 map?? 超帥!
02/08 12:08, 4F

02/08 12:10, , 5F
多分幾行吧, 先宣告一個map<int,int>, insert 2,3 之後
02/08 12:10, 5F

02/08 12:11, , 6F
再把他當做m_map.insert的第二個參數
02/08 12:11, 6F

02/08 12:11, , 7F
應該說是m_map.insert裡的pair的第二個參數
02/08 12:11, 7F

02/08 12:26, , 8F
這樣合起來也ok啊
02/08 12:26, 8F

02/08 14:00, , 9F
吃完飯回來發現我上面推的方法很鳥, 請無視, 可以用
02/08 14:00, 9F

02/08 14:01, , 10F
m_map[1].insert(map<int,int>::value_type(2,3));
02/08 14:01, 10F

02/08 22:16, , 11F
intMap.insert( pair<int,map<int,int>>( 1,pair<int
02/08 22:16, 11F

02/08 22:16, , 12F
,int>(2,3) ) );
02/08 22:16, 12F

02/08 22:16, , 13F
請問為何這樣不能?
02/08 22:16, 13F

02/08 22:59, , 14F
樓上寫得那個和原po寫的完全等價,所以也錯一樣的地方
02/08 22:59, 14F

02/08 23:00, , 15F
你們insert的物件類型是對的,但是建構式的第二個參數
02/08 23:00, 15F

02/08 23:00, , 16F
都是錯的. pair<int,map<int,int>> 的建構式的第二個
02/08 23:00, 16F

02/08 23:01, , 17F
參數是map<int,int> 而 pair<int,int>(2,3) 只會產生
02/08 23:01, 17F

02/08 23:01, , 18F
一個 pair, 不會產生一個 map
02/08 23:01, 18F

02/08 23:36, , 19F
大概了解了,感謝!
02/08 23:36, 19F

02/09 23:24, , 20F
S大,請問如果要直接insert該怎樣寫呢?就是像我那樣
02/09 23:24, 20F

02/09 23:25, , 21F
而不是用m_map[1]的方式,是直接m_map.insert
02/09 23:25, 21F

02/09 23:26, , 22F
但不要另外宣告一個map...
02/09 23:26, 22F

02/10 01:01, , 23F
insert和[]在key存在的時候動作不一樣,這點要注意一下
02/10 01:01, 23F

02/10 10:17, , 24F
請問是實作方式的不同嗎?請問有什麼關鍵字嗎?
02/10 10:17, 24F

02/10 11:34, , 25F
沒辦法在一個statement內做完, 至少我不會 XD
02/10 11:34, 25F

02/10 11:35, , 26F
因為map沒有ctor可以在建構同時只放入一個指定pair
02/10 11:35, 26F

02/10 11:36, , 27F
除非用copy ctor或iter ctor, 那就不是一次做完啦
02/10 11:36, 27F

02/10 11:38, , 28F
key已經存在的話, insert do nothing, [] copy assign
02/10 11:38, 28F

02/10 11:42, , 29F
了解,我也是想說用ctor但是一直都不能過
02/10 11:42, 29F
文章代碼(AID): #1FCV8ybE (C_and_CPP)