帮助地图C ++

时间:2011-08-31 09:18:36

标签: c++ maps

我有一张地图将size_t链接到一对size_t和int

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

基本上我对此的理解是,map的工作类似于stacks,jst一个接一个地插入,给出类似的东西:

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

我的问题是,如何获取int的值。即2,7,5。我想将此值用作while循环的最大大小。

5 个答案:

答案 0 :(得分: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 :(得分:1)

要访问int,您可以执行以下两项操作之一

unsigned int myint = mymap[key].second;

其中key的类型为size_t。这是有效的,因为在地图上使用[size_t]会返回std::pair<size_t, unsigned int>,然后在此处调用.second会获得uint。

您也可以使用迭代器

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

答案 2 :(得分: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;
  • it-&gt; second:是地图的Value部分(在本例中为std :: pair&lt; size_t,unsigned int&gt;)
  • it-&gt; second.second:是该对的第二部分(unsigned int)

答案 3 :(得分: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

答案 4 :(得分: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