![](/img/trans.png)
[英]fatal error: unordered_map: No such file or directory (C++ 98, gcc 4.8.5, using CMAKE)
[英]Declaring/defining c++ struct in different file - better compile time using gcc 4.8.5?
我目前有一个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个Inner_values。
我正在使用python创建c ++代码,并正在使用gcc(CMAKE)进行编译。 我需要在c ++主体中保留某种枚举映射,以便我可以运行c ++代码,获取中间整数值并将其传递给枚举,以最终返回关联的字符串。
现在,我在c ++文件的主要功能中列表初始化了一个2-D unordered_map。 在所有其他编译时初始化中,这花费的时间最短。 但是,仍然需要5〜10分钟。
根据我的建议,我将2-D枚举分为多个(Outer_keys总数)一维结构,将它们存储在不同的文件中,然后在需要时“使用”特定的一维结构。
我在这里有两个问题。
即使我将它们分割并放入不同的文件中,编译时间也不相同吗?
如果通过分割成多个一维结构来减少编译时间,我应该采用哪种方法进行编码? 我应该在.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;
}
- 即使我将它们分割并放入不同的文件中,编译时间也不相同吗?
将翻译单元拆分为多个片段通常会从头开始增加编译时间。
但是,每个翻译单元都可以单独编译,因此,如果仅更改一个,则仅需要重新编译该文件。 通常,必须编译一部分程序比完全编译它要快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.