这张地图在C++中是如何工作的

How does this map work in C++?

本文关键字:何工作 工作 C++ 张地图 地图      更新时间:2023-10-16
#include <cstdio>
#include <map>
#include <string>
using namespace std;
map < string, int > m;
char line[32];
int main(void){
    int n, t;
    for(scanf("%d", &t); t--; ){
        m.clear();
        for(scanf("%dn", &n); n--; ){
            fgets(line, 32, stdin);
            line[32] = 0;
            ++m[line];
        }
        map < string, int >::iterator it;
        for(it = m.begin(); it != m.end(); it++)
            printf("%s%dn", it->first.c_str(), it->second);
        if(t) puts("");
    }
    return 0;
}

这基本上接受许多字符串,并按排序顺序输出它们及其频率。我有一个疑问。此处正在使用地图。因此,它接受字符数组中的字符串,然后直接在map的特定位置递增。不需要在地图的那个位置插入该字符串吗?喜欢

 string s = line;
 m.insert(pair<string,int>(s,1);

我们可以直接在该位置递增而不先插入它吗?对不起,如果这是一个基本的疑问,但我是学习C++的新手。

std::mapoperator[]搜索带有参数的值,如果存在则返回,如果不存在,则插入具有默认构造值并返回新创建的值。

行:++m[line]检查映射中是否存在参数键,如果退出则返回频率,如果没有,则插入值为0(默认值为int(的行。

其他建议(如果是C++编程(,请在所有源代码中使用C++。

  • std::cinstd::cout的进出
  • 使用std::getline和使用std::string读取行
  • 在C++主要不必将void作为参数,当不使用参数时(int main()(是标准方法。

您正在使用索引访问map

++m[line];

如果键尚不存在,则使用索引访问始终会插入新的默认值。

阅读文档:链接