如何在不添加其他节点的情况下检查给定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;
}
答案 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
中的价值。