如何在循环中的 STL 映射中插入值
How to insert values in STL map within a loop
我想知道如何在循环内的地图中插入值。
我在下面的代码中使用了 insert()
但这没有用。
#include<stdio.h>
#include<map>
#include<utility>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, i;
map<char*, int> vote;
char name[20], v;
scanf("%d", &n);
for (i = 0; i<n; ++i)
{
scanf("%s %c", name, &v);
vote.insert(make_pair(name, 0));
vote[name] = 0;
if (v == '+')
vote[name]++;
else
vote[name]--;
printf("%d\n", vote[name]);
printf("Size=%lu\n", vote.size());
}
int score = 0;
for (map<char*, int>::iterator it = vote.begin(); it != vote.end(); ++it)
{
printf("%s%d\n", it->first, it->second);
score += it->second;
}
printf("%d\n", score);
}
}
每次我键入一个新键(字符串)时,它只会更新前一个。
地图的大小总是1.
如何正确地向地图添加新元素?
地图由指针 (char*
) 键入。您代码中的关键始终是相同的 - name
指针(虽然您更改了指针指向的内容,但不会改变指针本身不相同的事实)。
您可以使用 std::string
作为键而不是 char*
。
更改地图的定义(将 char*
替换为 std::string
)将解决问题。
编辑:正如@McNabb 所说,也将 it->first
更改为 it->first.c_str()
。
我想知道如何在循环内的地图中插入值。
我在下面的代码中使用了 insert()
但这没有用。
#include<stdio.h>
#include<map>
#include<utility>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, i;
map<char*, int> vote;
char name[20], v;
scanf("%d", &n);
for (i = 0; i<n; ++i)
{
scanf("%s %c", name, &v);
vote.insert(make_pair(name, 0));
vote[name] = 0;
if (v == '+')
vote[name]++;
else
vote[name]--;
printf("%d\n", vote[name]);
printf("Size=%lu\n", vote.size());
}
int score = 0;
for (map<char*, int>::iterator it = vote.begin(); it != vote.end(); ++it)
{
printf("%s%d\n", it->first, it->second);
score += it->second;
}
printf("%d\n", score);
}
}
每次我键入一个新键(字符串)时,它只会更新前一个。 地图的大小总是1.
如何正确地向地图添加新元素?
地图由指针 (char*
) 键入。您代码中的关键始终是相同的 - name
指针(虽然您更改了指针指向的内容,但不会改变指针本身不相同的事实)。
您可以使用 std::string
作为键而不是 char*
。
更改地图的定义(将 char*
替换为 std::string
)将解决问题。
编辑:正如@McNabb 所说,也将 it->first
更改为 it->first.c_str()
。