2015-09-03 4 views
1

Как я могу получить значение с карты по ключу? У меня есть вектор ints A, и у меня есть карта. Я хочу напечатать M[1], но я не понимаю, как я могу это сделать, потому что я получил сообщение об ошибке:Как получить значение с карты по ключу

error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'mapped_type' (aka 'std::__1::pair<int, int>')) 
    cout << M[1]; 
    ~~~~^~~~~ 

Мой код:

Тип
int main() { 
    vector<int> A; 
    map<int, pair<int,int> > M; 

    FOR(i,1,maxN) { 
     pair<int,int> p; 

     p.first = 1; 
     p.second = 2; 

     M[i] = p; 
    } 

    FOR(i,0,t) { 
     int x = A[i]; 
     cout << M[x] << endl; 
    } 

    return 0; 
} 
+0

Может быть, попытаться получить, если первый, а затем попытайтесь напечатать его, и посмотреть, что идет не так. Подсказка: это не получение. – juanchopanza

+1

Похоже, что оператор '<<' не был перегружен для работы с 'std :: pair ' –

+0

Я не уверен, что вы сделали для ваших циклов for, но, пожалуйста, не используйте '# define', чтобы сделать C++ выглядят как другие языки. Вы только путаете себя и других. Действительно ли так сложно написать 'for (int i = 0; i

ответ

4

Значение карты является станд :: пара. Вам необходимо индивидуально напечатать два значения в паре:

cout<< M[x].first << "," << M[x].second << endl; 
+0

У меня такая же ошибка – rel1x

+0

Можете ли вы вставить новый код? – Paani

+0

Upg, мне очень жаль, ответ правильный! –

2

У Paani есть хороший ответ. Я думал, что я пошлю свое, это та же идея, но немного другая.

Вместо печати значений из пары вы можете создать функцию ostream для печати любой пары.

Как это:

#include <iostream> 
#include <utility> 

template<class T, class U> 
std::ostream& operator<<(std::ostream &os, const std::pair<T, U> &p) { 
    os << '{' << p.first << ',' << p.second << '}'; 
    return os; 
} 

int main() { 
    std::pair<int, int> p(7, 11); 
    std::pair<std::string, double> q("My Double", 37.02); 

    std::cout << p << std::endl; 
    std::cout << q << std::endl; 
    return 0; 
} 
Смежные вопросы