C++ 访问地图';s值,如果其键存在C++;

C++ 访问地图';s值,如果其键存在C++;,c++,dictionary,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) { doubl

我试图在一个特定的键上访问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;
void计算(向量测试、map pos、map neg){
双posProb=1,negProb=1;
对于(int i=0;i秒*下溢变量;
else posProb*=pos.find(“UNK”)->第二个*下溢变量;
}

像这样的东西怎么样

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;
}
auto unk=pos[“unk”];
对于(int i=0;isecond:unk)*下溢变量;
}

您的
查找
已失败,因此您可能需要类似以下内容:

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;
void计算(向量测试、map pos、map neg){
双posProb=0,negProb=0;
对于(int i=0;i秒*下溢变量;
{
否则{
if(pos.find(“UNK”)==pos.end()){
位置(“UNK”)=1;/??
}
posProb*=pos.find(“UNK”)->秒*下溢风险;
}
}

你的初始值是0,所以你所做的就是乘以0。@PaulMcKenzie这是我的第二个问题!感谢你抓住了这个问题!当我保持pos[test[I]->秒时,我收到“错误:表达式必须有指针类型”@Shannon抱歉,修复了我刚刚尝试了一些不同的东西,表面上它似乎正常工作。我现在有了
pos[test[I]]
,没有
->秒