gpt4 book ai didi

c++ - 初始化我的 std::map

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:27 25 4
gpt4 key购买 nike

我已经编写了以下使用Map 的代码。此程序查找 string 键在 Map 中出现的次数。如果它仅出现一次,则该 string 键的 int 值应为 1,依此类推。该程序运行并产生所需的输出 - 但我觉得这纯属运气,因为我没有在任何地方初始化 Map。我只是在做 myMap[str]++ - 这决不能保证最初的值是 0。那么,我该如何初始化 map ,以便在遇到任何 string 键的值为 0 之前,我执行 myMap[str]++ ?

#include<cstdio>
#include<string>
#include<iostream>
#include<map>

int main()
{
int t;
long int n;
std::string str;
std::map< std::string, int > myMap;
scanf("%d", &t);

while(t--)
{
scanf("%ld", &n);
std::cin.ignore();
while(n--)
{
getline(std::cin, str);
myMap[str]++;
}

for(std::map< std::string, int >::iterator it=myMap.begin(); it!=myMap.end(); it++)
printf("%s %d\n", it->first.c_str(), it->second);
printf("\n");

myMap.erase(myMap.begin(), myMap.end());
}

return 0;
}

示例输入:

2
6
03 10103538 2222 1233 6160 0142
03 10103538 2222 1233 6160 0141
30 10103538 2222 1233 6160 0141
30 10103538 2222 1233 6160 0142
30 10103538 2222 1233 6160 0141
30 10103538 2222 1233 6160 0142

5
30 10103538 2222 1233 6160 0144
30 10103538 2222 1233 6160 0142
30 10103538 2222 1233 6160 0145
30 10103538 2222 1233 6160 0146
30 10103538 2222 1233 6160 0143

示例输出:

03 10103538 2222 1233 6160 0141 1
03 10103538 2222 1233 6160 0142 1
30 10103538 2222 1233 6160 0141 2
30 10103538 2222 1233 6160 0142 2

30 10103538 2222 1233 6160 0142 1
30 10103538 2222 1233 6160 0143 1
30 10103538 2222 1233 6160 0144 1
30 10103538 2222 1233 6160 0145 1
30 10103538 2222 1233 6160 0146 1

详细问题描述可见here .

谢谢!

最佳答案

你说:

this in no way guarantees that initially the value was 0

这是不正确的。当映射中不存在与键对应的项目时,使用 operator[] 函数将其初始化为值。

来自 http://en.cppreference.com/w/cpp/container/map/operator_at :

If an insertion is performed, the mapped value is value-initialized (default-constructed for class types, zero-initialized otherwise) and a reference to it is returned.

换句话说,

        myMap[str]++;

是有效且正确的代码。

关于c++ - 初始化我的 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37064170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com