Получение значения мультикарты в C ++ - PullRequest
2 голосов
/ 07 октября 2011

Мне было интересно, как мне получить значение мультикарты в C ++

Ответы [ 2 ]

10 голосов
/ 07 октября 2011

Мультикарта имеет внутреннюю структуру, представленную как std::pair<T_k, T_v>.У него есть первый, второй члены.first - это ключ, а second - это значение, связанное с ключом.

#include <iostream>
#include <map>

using namespace std;

int main(){

        multimap<int,int> a;
        a.insert(pair<int,int> (1,2));
        a.insert(pair<int,int> (1,2));
        a.insert(pair<int,int> (1,4));
        for (multimap<int,int>::iterator it= a.begin(); it != a.end(); ++it) {
                cout << it->first << "\t" << it->second << endl ;
        }

        return 0;
}

Выход:

1 2
1 2
1 4

7 голосов
/ 07 октября 2011

Чтобы получить значение multimap, вам нужно использовать его имя.

Поэтому, если у вас есть мультикарта с именем myMap, вы можете получить ее значение с помощью выражения:

myMap

Как только у вас есть его значение, вы можете скопировать его в другую мультикарту или вызвать функции-члены на нем, чтобы разложить его значение на меньшие логические подзначения.


Для доступа к определенному диапазонусопоставленные значения, которые соответствуют данному ключу (в данном примере называемому myKey), вы можете использовать:

myMap.equal_range(myKey)

Это оценивается как std::pair из iterator s (или const_iterators, если *)1018 * - это const), которые разграничивают диапазон пар ключ-значение с ключами, эквивалентными myKey.

Например (предположим, что myMap - это карта от T1 до T2, где T1 иT2 не являются зависимыми типами):

typedef std::multimap<T1, T2>::iterator iter;
for (std::pair<iter, iter> range(myMap.equal_range(myKey));
     range.first != range.second;
     ++range.first)
{
    //In each iteration range.first will refer to a different object
    //In each case, range.first->first will be equivalent to myKey
    //and range.first->second will be a value that range.first->first maps to.
}
...