这张地图在C++中是如何工作的
How does this map work in C++?
#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::map
的operator[]
搜索带有参数键的值,如果存在则返回值,如果不存在,则插入具有默认构造值的键并返回新创建的值。
行:++m[line]
检查映射中是否存在参数键,如果退出则返回频率,如果没有,则插入值为0
(默认值为int(的行。
其他建议(如果是C++编程(,请在所有源代码中使用C++。
- 带
std::cin
和std::cout
的进出 - 使用
std::getline
和使用std::string
读取行 - 在C++主要不必将
void
作为参数,当不使用参数时(int main()
(是标准方法。
您正在使用索引访问map
:
++m[line];
如果键尚不存在,则使用索引访问始终会插入新的默认值。
阅读文档:链接
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?