2011-08-31 66 views
0

我有一張地圖,一個爲size_t鏈接到一對,爲size_t和int幫助地圖C++

std::map< size_type, std::pair<size_t, unsigned int> > mapVals;

基本上我的這種理解,是地圖的工作方式與堆棧和JST插入一個接着給出類似於:

1 -> (2,2) 
2 -> (4,7) 
3 -> (8,5) 
etc. 

我的問題是,我該如何獲取int的值。即2,7,5。我想用這個值作爲while循環的最大尺寸。

回答

0

我不知道你想究竟

for (std::map< size_type, std::pair<size_t, unsigned int> >::iterator it = mapVals.begin(); it != mapVals.end() ; it++) 
    cout << it->second.first << " " << it->second.second << endl; 
  • 它 - >第二:是地圖的Value部分(在這種情況下的std ::對<爲size_t,無符號整型>)
  • IT-> second.second:是對所述第二部分(無符號整型)
+0

這是*不*工作,因爲在這種情況下,它 - >第二仍然是一個'的std :: pair'。請看我的迴應。 –

+0

對不起。錯過了第一步。現在修復它。 –

0
typedef std::map< size_type, std::pair<size_t, unsigned int> > mymapT; 
mymapT mapVals; 

... // fill the map 

first = mapVals[1].second; 
second = mapVals[2].second; 
third = mapVals[3].second; 

... // do something useful 
0

你可以做這樣的事情:

typedef std::map< size_type, std::pair<size_t, unsigned int> > myMap; 
myMap mapVals; 
// ... populate 
myVals[1] = std::pair<size_t, unsigned int>(2,2); 
// ... 
for (myMap::const_iterator it = myVals.begin(); it != myVals.end(); ++it) 
    unsigned int each_value = it->second.second; 

第一it->second會給你std::pair <size_t, unsigned int>元素。第二個second將給你包含在該對中的unsigned int

4

地圖與堆棧不相似;一個堆棧保持先入先出(FILO)策略。地圖是將某個鍵映射到某個值的東西。

如果你做這樣的事情:

typedef std::pair<size_t,unsigned_int> my_pair; 

// Insert elements 
my_map[3] = my_pair(2,2); 
my_map[9] = my_pair(4,7); 
my_map[7] = my_pair(8,5); 

您可以擷取對作爲第二個元素:

my_map[9].second // evaluates to 7 
1

要訪問的詮釋,你可以做兩件事情

unsigned int myint = mymap[key].second; 
一個

其中keysize_t類型。這是可行的,因爲在地圖上使用[size_t]會返回一個std::pair<size_t, unsigned int>,然後調用.second就可以得到你。

你也可以使用迭代器

std::map<size_t, std::pair<size_t, unsigned int> >::iterator itr = mymap.begin(); // say 
unsigned int myint = itr->second.second; 
+0

它不是'second()',而是'second'。 –

+0

事實上,這是早期的;) – Dan