我有一个简单的使用案例:解析头文件。我必须解析许多这些头文件,并且我保证有一个头文件不会重复任何字段。
当我解析这些头文件时,我会将它们组织在一个std :: map
中,
// pseudo code
std::map<std::string,std::string> x;
x[key] = value;
// etc.
我已经精简了我的代码,但最慢的地方是这些头文件的映射插入。具体来说,当将项目插入到映射中时调用
std::_Rb_tree_iterator
内部方法。使用gprof进行基准测试表明,当仅在读取这些标题时调用此单个方法(而不在任何可能插入或删除映射项的其他操作期间)时,它大约占据了我的运行时间的50%。问题在于:假设我可以保证映射中所有条目的唯一性,是否有办法禁用
std::_Rb_tree_iterator
以实现流畅的映射插入?我更喜欢运行缓慢的代码而不是使用除
std::map
之外的其他内容,除非替代品具有等效的api(即迭代器产生std::pair<std::string,std::string>
)。
std::unordered_map
,会发生什么呢? - NathanOliverstd::vector<std::pair</*const*/ std::string, std::string>>
,表示了一个存储了两个字符串元素的向量容器。其中第一个字符串键是常量(const),第二个字符串值没有限制。 - Jarod42