我有一個小問題。 我有一對矢量patternOccurences。這些對是<string,int>
,其中string是模式(名稱),int是它出現的索引。我的問題是patternOccurences具有多個具有相同.first(相同模式)但不同int值的對。 例如:該矢量有10個條目。模式「a」的5個和模式「b」的5個。都有不同的指數。現在我想要一張地圖(或類似的東西),這樣我就可以將每個模式(在我的示例中爲「a」和「b」)中的矢量/列表作爲關鍵字,並將它們的索引矢量作爲值。這些索引位於我的向量對中的不同對中,並且我希望int向量中的模式「a」的所有索引都是鍵「a」的值。向量對映射
我嘗試以下:
std::map<std::string,std::vector<int>> occ;
for(int i = 0;i<patternOccurences.size();i++){
if(occ.find(patternOccurences.at(i).first)==occ.end()){
occ[patternOccurences.at(i).first]=std::vector<int>(patternOccurences.at(i).second);
}
else{
occ[patternOccurences.at(i).first].push_back(patternOccurences.at(i).second);
}
}
patternOccurences是對和OCC所需的映射向量。首先我檢查是否已經有一個字符串(模式)的條目,如果沒有,我創建一個與矢量作爲價值。如果已經有一個我嘗試push_back與索引的向量。但它似乎沒有正確的工作。對於第一種模式,我得到一個只有0值的向量,而第二種模式只有3個正確的索引,其他的索引也是0。
我希望你能幫助我。 Kazoooie
你不需要使用'find'。 'map :: operator []''如果鍵還不存在,則默認構造該值。 'for(const auto&pair:patternOccurences)occ [p.first] .push_back(p.second);''是你所需要的。 – jrok
謝謝!欣賞它。 – R6D1H2