2011-08-31 64 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