使用插入增加地图中的值C++
问题描述:
我有以下问题 - 我想要计算文件中每个单词的出现次数。我使用的是map<string,Count>
所以关键是代表字的字符串对象,并正在抬头的价值在于保持弦数,因此对象:使用插入增加地图中的值C++
class Count {
int i;
public:
Count() : i(0) {}
void operator++(int) { i++; } // Post-increment
int& val() { return i; }
};
的问题是,我想用insert()
而不是operator[]
。这是代码。
typedef map<string, Count> WordMap;
typedef WordMap::iterator WMIter;
int main() {
ifstream in("D://C++ projects//ReadF.txt");
WordMap wordmap;
string word;
WMIter it;
while (in >> word){
// wordmap[word]++; // not that way
if((it= wordmap.find(word)) != wordmap.end()){ //if the word already exists
wordmap.insert(make_pair(word, (*it).second++); // how do I increment the value ?
}else{
...
}
for (WMIter w = wordmap.begin();
w != wordmap.end(); w++)
cout << (*w).first << ": "
<< (*w).second.val() << endl;
}
答
的问题是,我想用
insert()
代替operator[]
...为什么? std::map::insert
不能改变现有的值。 operator[]
是正确的工作。
如果你真的想使用insert
(请不要),你首先需要erase
现有的值,如果存在的话:
if((it= wordmap.find(word)) != wordmap.end())
{
const auto curr = it->second; // current number of occurrences
wordmap.erase(word);
wordmap.insert(make_pair(word, curr + 1));
}
+0
可以用C++ 17看起来更漂亮:if(auto it = wordmap.find ); it!= wordmap.end()){...}' – lisyarus
这有什么错用'的std ::地图'和'wordmap [word] ++;'? – NathanOliver
@NathanOliver我正在做一些练习,我必须用'insert()'来完成。无论如何,下面的答案对我来说很清楚。 – yooo123
如果该值已经存在,'insert'不会插入任何内容。 –