//cities[str]=new list
你把这一句注释掉,没有创建list,cities[str]是不存在的(即它的值是未知的),而你接下来有调用了cities[str].insert(temp);。
这就相当于:
list
list->insert(...);// 调用不存在的对象的非静态成员,所以要出错。
另外,析构函数写的不好,程序的设计有问题。
map
map
//cities[str]=new list
//delete cities[str];
本身就不符合语法的,所以会报错,去掉自然不会报错了