2012-01-12 64 views
0
map <int, string> rollCallRegister; 
map <int, string> :: iterator rollCallRegisterIter; 

pair <map <int, string> , bool> returnPair; 

rollCallRegister.insert (pair <int, string> (1, "anisha")); 

在此代碼中,pair <map <int, string> , bool> returnPair;表示此對採用地圖行作爲第一個值,而bool作爲第二個值。STL對輸入與STL映射

問題
如何插入布爾這裏:rollCallRegister.insert (pair <int, string> (1, "anisha"));

其次,pair <map <int, string> :: iterator, bool> returnPair;這一對需要映射的迭代器作爲第一個輸入。

問題
這是如何從以前的對語法不同,由於插入的方式仍然是相同的:rollCallRegister.insert (pair <int, string> (1, "anisha"));

+0

目前還不清楚問題在哪。 insert方法返回迭代器到插入的鍵和一個布爾值,顯示是否發生了插入(或者鍵已經存在)? – visitor 2012-01-12 09:09:59

+0

第一個問題:你的意思是? 'rollCallRegister'沒有'bool'成員,只有'returnPair'。你想把'rollCallRegister'和'bool'一起插入'returnPair'嗎? – bitmask 2012-01-12 09:10:15

+0

@visitor插入返回一對,並且該對的第一個參數可以是地圖行以及地圖迭代器。但插入的插入語法對於兩種方式都是相同的。爲什麼?其次,當我們將這對變爲'pair ,bool>'插入返回什麼?一個迭代器? – 2012-01-12 09:25:22

回答

1

pair<map<int, string >, bool>的第一個值是而不是一個地圖行,它是一個完整的地圖(可能不是你要找的東西)。另一方面,第二對將地圖條目與布爾值相關聯。

關於插入,我沒有真正得到你的問題:在這兩個示例中,你插入到map<int, string>;它與您定義的不同類型的對無關。爲了創建這兩種對的情況下,你在第一種情況下需要map,並在第二個迭代器:

pair<map<string, int>, bool> p1(rollCallRegister, true); 
pair<map<string, int>::iterator, bool> p2(rollCallRegisterIter, false); 

編輯:

根據您對您的問題提出的意見,我想你會混淆地圖的內容(pair<string, int>)和insertpair<map<string, int>::iterator, bool>)返回的值。

當您申報map<K,V>時,其內容存儲在pair<K,V>中。因此,插入在此映射一個新的條目,你需要創建一個包含要插入鍵和值對:

map<K,V> myMap; 
pair<K,V> myEntry(key, value); // entry to insert 

myMap.insert(myEntry);   //or you can create the entry on-the-fly 
myMap.insert(make_pair(key, value)); 

現在,當你插入一個進入的地圖,有可能鑰匙已經存在。如果是這種情況,則插入應該「失敗」:在呼叫insert之後,該鍵仍然與前一個值相關聯。但是,應該警告呼叫方,他試圖用已經存在於地圖中的密鑰插入條目。

這可以通過讓insert返回pair<map<K,V>::iterator, bool>來實現,其中第二個值是一個布爾值,指示插入是否發生(密鑰尚未存在於地圖中)。第一個值是對應於鍵的條目的迭代器。此條目包含密鑰及其關聯值(您剛插入的值或已存在的值)。

+0

Luc和@visitor哦,我現在得到了:banghead:我的問題是我在想,我已經聲明瞭這對:'pair :: iterator,bool>'是插入到地圖中的一個。事實上,插入需要一對簡單的任意兩個值,並將迭代器返回到地圖的行和布爾值!我想我現在已經明白了。謝謝。 – 2012-01-12 09:39:20

+0

感謝您的編輯。是的,我很困惑。 :衛生署: – 2012-01-12 09:43:48

1

你也不能插入布爾rollCallRegister,因爲它只需INT關鍵和一個字符串,如您目前的表單值。

如果您希望rollCallRegister地圖包含對(整型,字符串)爲重點的和布爾作爲價值你需要將其更改爲:

map <pair<int, string>, bool> rollCallRegister; 
rollCallRegister.insert(std::make_pair(std::make_pair(yourint, yourstring), true/false)); 
+0

'map bitmask 2012-01-12 09:13:19

+0

@bitmask:標準中定義的map 的語義是對序列的字典排序。順便說一句,鑰匙不需要全部訂單,而只需要一個嚴格的薄弱訂單。 – celtschk 2012-01-12 09:21:32

+0

將示例更改爲使用一對作爲關鍵字。 – Kristofer 2012-01-12 09:21:50

0

相當瑣碎: pair<pair <int, string>, bool>。不過你可能想看看make_pair