Помогите с картой C ++ - PullRequest
       7

Помогите с картой C ++

0 голосов
/ 31 августа 2011

У меня есть карта, которая связывает size_t с парой size_t и int

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

По сути, я понимаю, что карты работают аналогично стекам и вставляют одну за другой, давая что-то похожее на:

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

мой вопрос, как мне получить значение типа int. то есть 2,7,5. Я хочу использовать это значение в качестве максимального размера цикла while.

Ответы [ 5 ]

4 голосов
/ 31 августа 2011

Карты не похожи на стеки;стек поддерживает стратегию «первым пришел - последним вышел» (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 голос
/ 31 августа 2011

Для доступа к 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;
0 голосов
/ 31 августа 2011
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 голосов
/ 31 августа 2011

Вы можете сделать что-то подобное:

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, содержащийся в этой паре.

0 голосов
/ 31 августа 2011

Я не уверен, что именно вы хотите

 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-> second: является Value частью карты (в данном случае std :: pair )
  • it-> second.second: вторая часть пары (без знака int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...