2015-11-15 47 views
1

我試圖訪問特定鍵的映射值,只要該鍵存在。訪問映射的值,如果其密鑰存在C++

要檢查鑰匙存在,我有:

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; 

我該如何調整我現在有的東西,以便我可以適當地訪問第二個變量(價值)我的地圖?

+1

你的初始值是0,所以你正在做的是用0 – PaulMcKenzie

+0

@PaulMcKenzie這是我的第二個問題乘以!謝謝你接受! – Shannon

回答

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

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; 
+0

當我保留pos [test [i]] - > second時,我收到「錯誤:表達式必須有指針類型」 – Shannon

+0

@Shannon抱歉,修正了 –

+0

我剛剛嘗試了一些不同的東西,並且在表面上它看起來按預期工作。我現在有'pos [test [i]]'而沒有' - > second''。 – Shannon