在不增加大小的情况下检查地图的内容

时间:2015-08-01 02:22:16

标签: c++ dictionary

如何在不添加其他节点的情况下检查给定Pair的地图值?这是我的代码的简化版本。

#include<iostream>
#include<map>

using namespace std;

struct Pair{
    int key1,key2;
    Pair(int k1,int k2):key1(k1),key2(k2) {}
    friend bool operator<(const Pair &a, const Pair &b){
        return a.key1 < b.key1;
    }
};
map<Pair,int> m;
int check(Pair p){
    return m[p];
}

void increment(Pair p){
    m[p]++;
}

int main(){

    int x = check(Pair(1,2)); // Should not add new node
    cout<<x<<endl;
    increment(Pair(2,3)); 
    x = check(Pair(2,3));
    cout<<x<<endl;

    char ch;cin>>ch;
    return 0;
}

1 个答案:

答案 0 :(得分:4)

您可以使用std::map::find

lm(y~x-1)

当然如果找不到该物品该怎么办?

您可以返回int check(Pair p) { auto found = m.find(p); if(found != m.end()) return found->second; return 0; // ?? error not found }

bool

你可以这样使用:

bool check(Pair p, int& i)
{
    auto found = m.find(p);
    if(found == m.end())
        return false; // not found
    i = found->second; // set the output parameter
    return true; // success
}

注意:输出参数int main() { int x; if(check(Pair(1,2), x)) cout << x << endl; // only output if x was found increment(Pair(2,3)); if(check(Pair(2,3), x)) cout << x << endl; // only output if x was found } 通过引用传递,因此可以在函数内更改它。这就是我们如何获得int& i中的价值。