如果密钥存在C ++,则访问映射的值

时间:2015-11-15 02:11:58

标签: c++ dictionary

我试图访问特定键的map值,只要该键存在。

要检查密钥是否存在,我有:

if (pos.find(test[i]) != pos.end())

在if语句中,我希望增加我的计数器:

posProb *= pos[test[i]]->second;

整个功能设置如下:

void compute(vector<string> test, map<string, double> pos, map<string, double> neg) {
double posProb = 1, negProb = 1;

for (int i = 0; i < test.size(); i++) {
    if (pos.find(test[i]) != pos.end())                     
        posProb *= pos[test[i]]->second * UNDERFLOWVAR;
    else posProb *= pos.find("UNK")->second * UNDERFLOWVAR;
}
cout << posProb;

如何调整我目前拥有的内容,以便我可以正确访问地图的第二个变量(值)?

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

auto unk = pos["UNK"];
for (int i = 0; i < test.size(); i++) {
    auto it = pos.find(test[i]);               
    posProb *= (it != pos.end() ? it->second : unk) * UNDERFLOWVAR;
}

答案 1 :(得分:1)

你的find已经失败,所以也许你想要这样的东西:

void compute(vector<string> test, map<string, double> pos, map<string, double> neg) {
double posProb = 0, negProb = 0;

for (int i = 0; i < test.size(); i++) {
    if (pos.find(test[i]) != pos.end()) {
        posProb *= pos[test[i]]->second * UNDERFLOWVAR;
    {
    else {
        if (pos.find("UNK") == pos.end()) {
            pos("UNK") = 1; //??
        }
        posProb *= pos.find("UNK")->second * UNDERFLOWVAR;
    }
}
cout << posProb;