我认为不能将迭代器转换为int并将其添加到map中。但是我想不出任何可以将值添加到映射中的替代方法,因为我需要将文本文件中的拼写错误单词数与给定字典进行比较。我需要迭代器来跟踪事件的发生。谁能帮我想出另一种写法吗?我知道这有点令人困惑
map<string, int> misspelled;
//Search for matches in random text file
while (getline(random, str)) {
//Search for matched words using regex_search and the rules are already defined
while (regex_search(str, matches, rules)) {
str = matches.suffix().str(); //Assign string to the matched words
// if words arent in dict - it is misspelled so add it into the map
if (dict.find(str) != dict.end()){
// add to map
misspelled.insert((pair<string, int>(str, dict.find(str)))); //error
}
// print out map
}
}
初始化'pair<std::string,>'(也称为'pair
<char,> allocator >, int>')没有匹配的构造函数
这是我得到的错误,我认为这是因为dict.find(str)
,因为find()
方法返回iterator
。
需要对迭代器解引用才能获得它的值。此外,在c++ 17之后,您可以在if中使用初始化语句,因此您不需要两次调用find()
:
if (auto item = dict.find(str); item != dict.end()){
misspelled.insert((pair<string, int>(str, *item)));
}