读书人

想用地图实现维护一个下载列表刚学

发布时间: 2013-07-16 22:38:05 作者: rapoo

求助,想用map实现维护一个下载列表,刚学,代码有问题,求指导


#define MAX 64
#define MAX_PATH 260
typedef struct NODE
{
char uuid[MAX];
char FileName[MAX_PATH];

//int* host;
long long size;
long long downsize;
int flag;

}NODE;
int main()
{
typedef map<string,NODE> DownloadFile;
DownloadFile file;
file.insert(make_pair("haha", ("haha","lala", 123, 21,1)));
// 根据key值查找UserStruct
file.find("haha");

}


[解决办法]
引用:
Quote: 引用:

编译器不会知道("haha","lala", 123, 21,1)这串东西是NODE,只会当成一串逗号运算符构成的表达式,结果是最后一项1

你可以先建立一个NODE变量并初始化然后塞进map,或者给NODE加个构造函数直接创建
如果支持c++11也可以make_pair("haha", NODE{"haha","lala", 123, 21,1})


引用:
编译器不会知道("haha","lala", 123, 21,1)这串东西是NODE,只会当成一串逗号运算符构成的表达式,结果是最后一项1

你可以先建立一个NODE变量并初始化然后塞进map,或者给NODE加个构造函数直接创建
如果支持c++11也可以make_pair("haha", NODE{"haha","lala", 123, 21,1})


那算了,这个似乎应该用list实现增删改查就行了。。。map似乎不是很合适
如果要求查找速度,选择map没有错啊,list的遍历速度太慢了
[解决办法]
NODE 你这个类都没有相应的多参数构造函数,添加一个多参数构造函数。
make_pari的时候,调用构造函数生成一个Node,就行了。
[解决办法]
NODE n("haha","lala", 123, 21,1);
file.insert(make_pair("haha", n));
[解决办法]
1)
int CDownloadFileInfo::setFileName(char *name)
{
if (name == NULL)
{
return 0;
}
memcpy(file.FileName,name,strlen(name)+1);
return strlen(name); //既然函数需要返回值,那就应该返回一个数值。
// 不然 void CDownloadFileInfo::setFileName(char *name) 多好呀!


}

2)运行时没有错误呀

[解决办法]
第一,能用就好。

第二,保证能用的情况下,提高代码的可读性,通用性,安全性,提高运行效率,编译效率。

第三,有时代码开发效率,比运行效率更重要,这个要适当取舍。

第四,在正确性,可读性,安全性,得到保证的前提下,提高效率,让编码风格更好。

读书人网 >C++

热点推荐