【发布时间】:2017-10-09 12:15:19
【问题描述】:
我有以下问题 - 我想计算文件中每个单词的出现次数。我使用的是map<string,Count>,所以键是代表单词的字符串对象,而要查找的值是保持字符串计数的对象,以便:
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;
}
【问题讨论】:
-
使用
std::map<string, std::size_t>和wordmap[word]++;有什么问题? -
@NathanOliver 我正在做一些练习,我必须用
insert()来做。无论如何,下面的答案对我来说很清楚。 -
如果值已经存在,
insert不会插入任何东西。 -
如果你想使用
insert是问题所在,那么解决方案是:改变主意,不要使用insert:P
标签: c++ dictionary insert