C++ 在不知道初始键的情况下使用map,c++;
我试图用一个映射来计算字母在字符串中出现的次数。我知道初始化映射时映射是如何工作的,但我遇到的问题是将每个字母存储在传入的字符串中,如果字母已经存储,则增加计数。因此,如果字符串是“hello”,那么地图将如下所示C++ 在不知道初始键的情况下使用map,c++;,c++,maps,C++,Maps,我试图用一个映射来计算字母在字符串中出现的次数。我知道初始化映射时映射是如何工作的,但我遇到的问题是将每个字母存储在传入的字符串中,如果字母已经存储,则增加计数。因此,如果字符串是“hello”,那么地图将如下所示 map<char, int> counts counts['h'] = 1 counts['e'] = 1 counts['l'] = 2 counts['o'] = 1 map计数 计数['h']=1 计数['e']=1 计数['l']=
map<char, int> counts
counts['h'] = 1
counts['e'] = 1
counts['l'] = 2
counts['o'] = 1
map计数
计数['h']=1
计数['e']=1
计数['l']=2
计数['o']=1
必须有一种方法可以做到这一点,而不必为字母表中的每个字母都提供选项,对吗?但是,每个在线示例只有在已经知道键/值组合是什么的情况下才能使用映射。有人有什么想法吗?如果键不存在,则插入一个值初始化元素,对于基本类型,该元素表示“零”。所以你可以简单地说:
std::map<char, unsigned int> m;
for (char c : str) { ++m[c]; }
std::map m;
对于(char c:str){++m[c];}
然后报告计数:
for (auto const & p : m)
{
std::cout << "Character '" << p.first << "' appears "
<< p.second << "times.\n";
}
for(自动常量和p:m)
{
std::cout您可以使用0
map<char, int> counts;
counts['h'] = 0;
counts['e'] = 0;
counts['l'] = 0;
counts['o'] = 0;
map计数;
计数['h']=0;
计数['e']=0;
计数['l']=0;
计数['o']=0;
点击率和增量
void count(map<char, int>& counts, char input) {
map<char, int>:iterator entry = counts.find(input);
if(entry != counts.end()) {
++counts[input];
}
}
void count(映射和计数、字符输入){
map:iterator entry=counts.find(输入);
if(entry!=counts.end()){
++计数[输入];
}
}
请注意,如果事先不知道可能的键(如果您只是这样做的话),这也可以很好地工作
void count(map<char, int>& counts, char input) {
++counts[input];
}
void count(映射和计数、字符输入){
++计数[输入];
}
只需执行++计数[char];
,如果键不存在,它将插入一个。您永远不知道字符串中的字符是什么类型,硬编码非常有用fragle@billz我显然不是真的想硬编码输入!这就是为什么我将变量命名为input
…(将澄清THX)