如何通过键从地图获取价值

时间:2015-09-03 16:53:12

标签: c++ c++11

如何通过按键从地图中获取价值?我有一个整数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;
}

2 个答案:

答案 0 :(得分:4)

地图的值类型是std :: pair。您需要单独打印对中的2个值:

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

答案 1 :(得分:2)

帕尼有一个很好的答案。我以为我会发布我的,这是相同的想法,但略有不同。

您可以创建一个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;
}