Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不知道初始键的情况下使用map,c++;_C++_Maps - Fatal编程技术网

C++ 在不知道初始键的情况下使用map,c++;

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']=

我试图用一个映射来计算字母在字符串中出现的次数。我知道初始化映射时映射是如何工作的,但我遇到的问题是将每个字母存储在传入的字符串中,如果字母已经存储,则增加计数。因此,如果字符串是“hello”,那么地图将如下所示

   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)