我目前有一个c ++代码和一个Json文件。 Json文件包含二维结构的枚举,因此Json中的每个外键都有一个映射作为其值,即{Outer_key:{{Inner_key:Inner_value},...},...}。 C ++代码包含重载的打印函数,该函数分析输入数据,并且在函数调用过程中,代码使用Outer_key和Inner_key获取Inner_value。对于c ++ main函数的每次调用,大约检索到0〜10个Inner_value。但是,整个Json文件都映射了约20,000个内部值。
我正在使用python创建c ++代码,并正在使用gcc(CMAKE)进行编译。我需要在c ++主体中保留某种枚举映射,以便我可以运行c ++代码,获取中间整数值并将其传递给枚举,以最终返回关联的字符串。
现在,我在c ++文件的主要功能中列表初始化一个2-D unordered_map。在所有其他编译时初始化中,这花费的时间最短。但是,仍然需要5〜10分钟。
关于我收到的建议,是将2-D枚举划分为多个(Outer_keys总数)一维结构,将它们存储在不同的文件中,然后在需要时“使用”特定的一维结构。
我在这里有两个问题。
即使我将它们分割并放入不同的文件中,编译时间也不相同吗?
如果通过拆分为多个1-D结构来减少编译时间,我应该采用哪种方法进行编码?我应该在.h中声明结构,然后在.cpp main()中调用它们吗?我应该继续在其他.cpp文件中定义结构吗?我应该只是typedef枚举吗?另外,在main函数或print函数中,如何仅初始化所需的结构?
.cpp file generated using python below:
void overLoadedPrint (Particular_Datatype *data, std::unordered_map<std::string, std::unordered_map<std::string, std::string>> enumMap) {
printf("%s", enumMap["SomeKey"][A->member1.innerMember1].c_str());
//A->member1.innerMember1 returns integer.
//"SomeKey" is known in python so corresponding key is inputted.
}
int main() {
std::unordered_map<std::string, std::unordered_map<std::string, std::string>> enumMap = {{"A", {{"1", "a"},{"2", "b"}}...}
//list-initalize enumMap.
//compile time significantly increases here.
//info of this map is stored in a single json file.
overLoadedPrint(someData, enumMap);
return 0;
}
答案 0 :(得分:0)
- 即使我将它们分割并放入不同的文件中,编译时间也不相同吗?
将翻译单元拆分为片段通常会从头开始增加编译时间。
但是,每个翻译单元可以分别编译,因此,如果仅更改一个,则仅需要重新编译该文件。通常,必须编译一部分程序比完全编译它要快得多。