C++ 如何通过键从映射中获取值

C++ 如何通过键从映射中获取值,c++,c++11,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]; ~~~~ ^ ~~~~

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

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

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

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

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

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

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

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

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

也许先尝试获取if,然后尝试打印,看看哪里出了问题。提示:这不是获取。看起来我不确定你对循环做了什么,但是请不要使用定义来让C++看起来像其他语言。你只会把自己和别人弄糊涂。写forint i=0真的那么难吗;i@ZanLynx这段代码是我在编程比赛中使用的。我在工作中不使用这些宏。也许先尝试获取if,然后尝试打印它,看看哪里出了问题。提示:这不是获取。看起来我不确定你对循环做了什么,但是请不要使用定义来让C++看起来像其他语言。你只会把自己和别人弄糊涂。写forint i=0真的那么难吗;i@ZanLynx这段代码是我在编程比赛中使用的。我在工作中不使用这些宏。