2013-01-10 51 views
1

我在地圖中使用了一對字符串作爲鍵,並將int作爲值。我想要搜索地圖,如果確切的一對已經存在,請增加該值,否則將該對插入到地圖中(值爲1)。但是,它編譯的實際上並不是找到已經存在的對,而只是插入。 (輸出僅用於測試目的)。我認爲問題是使用.find()與對,但不知道如何解決這個問題...在地圖中使用.find()函數時,該鍵是一對C++

+1

看起來不錯。也許你應該展示更多的代碼。你有沒有測試過你試圖找到的那對是插在地圖上的? (通過遍歷地圖並打印) –

+2

不是'++喲[p]'完全符合你的要求嗎? –

+0

@JamesKanze:編號'yo'是一個迭代器,而不是'std :: map'。 – Nawaz

回答

1

您顯示的代碼似乎是正確的。你能用一個完整的例子來演示嗎?包括main

此外,我認爲你可以逃脫的operator[]

++pairs[std::make_pair(*slow, *fast)]; 

然而,真正的問題可能是,你希望pairs是一個「out」參數,當你按值傳遞。您的功能只能修改容器的副本。你想通過引用來取而代之。 map<pair<string, string>, int> findPairs(map<pair<std::string,std::string>, int>& pairs, multiset<string> artists){(注意參數pairs之前的&)。

+0

非常感謝你!通過參考工作!不知道爲什麼我沒有想到這個 – user1967688

0

有沒有錯後置碼

但是,你正在做的比要求太多。例如,該代碼是,

yo=pairs.find(p); 
if (yo==pairs.end()) 
{ 
    pairs.insert(make_pair(p,1)); 
    cout<<"inserted"<<endl; 
} 
else 
{ 
    yo->second+=1; 
    cout<<"entered"<<endl; 
} 

是完全等同於這樣的:

pairs.insert(make_pair(p,1)).first->second += 1; 

這正好相當於此:

++pairs[p]; 

這意味着整個代碼可以替換隻是++pairs[p],或只是這個:

++pairs[make_pair(*slow, *fast)]; 

因爲p畢竟是make_pair(*slow, *fast)

+0

我試過了:pair p = make_pair(* slow,* fast); 雙[p] ++;但它從來沒有增加數值 - 它只是在地圖上插入新對,值爲1 – user1967688

+0

@ user1967688:這不是可行的。如果它正在插入,那麼鍵是不同的。嘗試打印所有鍵值對。 – Nawaz

+0

我確實嘗試了打印所有關鍵值 - 相同的值多次列出,值爲1.您認爲搜索一對關鍵值時存在問題嗎?它有可能無法識別相等的對子嗎? – user1967688

相關問題