我有一张地图,一个为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'。请看我的回应。 –
对不起。错过了第一步。现在修复它。 –