带有无序列图的 C++
c++ With Unordered Map
对于一个项目,我有一个开场白,我决定把它放在一个std::unordered_map
中。不幸的是,我只能对整个地图进行硬编码。因此,我决定将初始化拆分为多个文件。
class OpeningBook
{
public:
OpeningBook();
private:
std::unordered_map<std::string, int> opening_database_;
void init1();
void init2();
void init3();
void init4();
void init5();
};
构造函数只是调用init
函数:
OpeningBook::OpeningBook()
{
init1();
init2();
init3();
init4();
init5();
}
所有这些看起来都是这样的:
void OpeningBook::init1()
{
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000001100000-1-1000",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100000-1-1100",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100001-1-1000",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100000-1-1010",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100010-1-1000",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100000-1-1001",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-100000010000-11-1000",0));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-100000010000-10-1100",5000));
// continues
}
但是,一旦我的代码命中 init1()
中的左大括号,它就会抛出堆栈溢出异常。我以为不会发生堆栈溢出,因为堆上有unordered_map
。这是怎么回事?我能做些什么来解决这个问题?
每个initx()
方法中插入了多少项?如果它有数千个,那么编译器可能正在生成在堆栈上使用大量临时的代码,并且只是要求比可用空间更多的堆栈空间。
尝试进一步拆分初始化方法,看看是否可以解决问题。
更好的方法可能是拥有一个包含初始化数据的表:
static const struct {
const char *str;
int n;
} DatabaseInitData[] = {
{"0001000000-10000001000000-1000001100000-1-1000",5000},
{"0001000000-10000001000000-1000000100000-1-1100",5000},
{"0001000000-10000001000000-1000000100001-1-1000",5000},
// etc
};
然后,在您的构造函数中:
OpeningBook::OpeningBook()
{
for (int i = 0; i < sizeof(DatabaseInitData)/sizeof(DatabaseInitData[0]); i++) {
opening_database_.insert(std::pair<std::string, int>(
DatabaseInitData[i].str,
DatabaseInitData[i].n));
}
}
相关文章:
- 递归无序映射
- c++找不到具有相同哈希的无序集合元素
- 正在将无序映射设置为无序映射的值
- 智能指针作为无序映射键,并通过引用进行比较
- 如何使用set实现无序数据结构?
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 如何禁用 CPU 的无序执行
- 从C++无序集合中高效提取元素
- 打印无序映射的第二个元素,即集合
- 当我将其插入无序地图时,矢量的容量为 0
- 代码块中无序多集的编译错误17.12
- 由并发无序映射查找线程调用的函数是否安全?
- 如何按值对无序哈希映射进行排序
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 使用无序映射在STL中存储键值对
- 为C++中的无序映射获取给定输入键的错误值
- 如何将一个单词拆分成字母,并将它们放入一个无序的列表/集合中
- 将大型对象存储在无序映射中是否效率低下
- 仅从无序集合中删除一个项目