[C++] map 存放字符串

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

using namespace std;

int main()
{
    int m;
    map<const char*, int> mm;
    FILE *fp = fopen("input.txt", "r");
    fscanf(fp, "%d", &m);
    for(int i = 0; i < m; i++){
        char name[10];
        int duration;
        fscanf(fp, "%s %d", name, &duration);
        // mm.insert(pair<string, int>(name, duration));
        mm[name] = duration;
    }
    printf("%d\n", mm.size());
}

结果是无论文件中有多少条记录,最后的输出 map 的大小一直是 1。

这是因为 map 中存放的是 const char* 指针,而非字符串。调试时发现每次循环时 name 的首地址都是一样的,也就是说,虽然指针指向的内容每次都不同,但指针从未改变。因此,map 里最终只存放了一个指针,而这个指针指向的内容就是最后一条数据!

解决办法就是把 const char* 改为 string

map<string, int> mm;

版权声明:本文为weixin_43742643原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。