我有一張地圖,一個爲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循環的最大尺寸。
我有一張地圖,一個爲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循環的最大尺寸。
我不知道你想究竟
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,無符號整型>)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
你可以做這樣的事情:
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
。
地圖與堆棧不相似;一個堆棧保持先入先出(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
要訪問的詮釋,你可以做兩件事情
unsigned int myint = mymap[key].second;
一個
其中key
是size_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;
它不是'second()',而是'second'。 –
事實上,這是早期的;) – Dan
這是*不*工作,因爲在這種情況下,它 - >第二仍然是一個'的std :: pair'。請看我的迴應。 –
對不起。錯過了第一步。現在修復它。 –