我有大量的记录,比如大约4,000,000,我想反复解决它们并将信息放在与该记录相关联的类中.我不确定应该使用哪种数据结构?我应该使用矢量,地图还是哈希地图.我不需要插入记录,但我需要读取一个包含这些记录编号(或名称)集合的表,然后获取一些链接到该记录的数据并对它们执行一些处理.地图上的发现是否足够快,不能用于此示例的哈希图?记录有一个类作为其结构,在使用具有类作为其值的map或hashmap之前我没有做过任何事情(如果可能的话).先谢谢你们.
编辑:
我现在不需要同时在内存上记录所有记录>我需要先给它一个结构,然后从一些记录中获取数据.记录的总数大约是2000万,我想读取每个原始记录,然后如果我的新地图或向量中不存在我想要创建的基本信息,并将其余数据放在那里作为一个向量.因为我有2000万条记录,所以我认为每条记录都会通过400万条记录来查找该记录的基本信息是否存在,这将是非常令人难以忍受的.我有大约400万种类型的包,每个包都可以有多种服务类型(每包约5(20/4)).我想读取每个记录,然后如果包ID不存在于向量中或我想要使用的任何内容中,并将基本信息推送到向量中,然后将与该包相关的服务保存在向量中在包类中.
我从网上获得了一个源代码,但有一行对我来说很模糊.我有一个功能:
double dict(const char *str1, const char *str2) {
Run Code Online (Sandbox Code Playgroud)
并且此函数中的一行为:
if (strlen(str1) != 0 && strlen(str2) != 0)
while (prefix_length < 3 && equal(*str1++, *str2++)) prefix_length++;
Run Code Online (Sandbox Code Playgroud)
运算符++在*str1 ++和*str2 ++中做了什么?
我有一个处理和存储大量数据的函数,然后它将结果作为类的向量返回.存储在此函数中的数据量非常大,我希望在完成其工作后清除该函数的存储内存.是否有必要这样做(功能是否自动清除内存)还是应该通过某些功能清除内存?
更新:
vector<customers> process(char* const *filename, vector<int> ID)
{
vector<customers> list_of_customers;
(perform some actions)
return list_of_customers;
}
Run Code Online (Sandbox Code Playgroud) 我有一个由int和字符串组成的类,但我在该类中也有一个向量.我必须从文件中读取记录,然后在解析每一行之后,将信息放在我的类向量中.我必须获取ID和名称等基本包信息,然后添加随该包提供的服务,因此我可以拥有10个来自一个包的记录,但它们的服务类型不同.现在我正在尝试将数据放在每个包中并从每个元素访问数据,但是当我试图从类中的向量中获取数据时,我的编译文件崩溃了.它还打印出1233和foo,但不是测试.任何想法为什么会这样?
int main()
{
vector<package> packs;
package pack;
pack.ID = 1233;
pack.name = "foo";
packs.push_back(pack);
pack.putData("test",12);
cout << packs[0].name << endl;
cout << packs[0].ID << endl;
cout << packs[0].bservice[0].serviceID << endl; //[b]Crashes in this line[/b]
return 0;
}
Run Code Online (Sandbox Code Playgroud)
定义的类是:
class package
{
public:
class aservice
{
public:
int serviceID;
string othername;
};
int ID;
string name;
vector<aservice> bservice;
void putData(string name1, int serviceID1)
{
aservice obj;
obj.serviceID = serviceID1;
obj.othername = name1;
bservice.push_back(obj);
}
};
Run Code Online (Sandbox Code Playgroud)