我正在实时系统上接收文本格式(从文本文件或缓冲区)的离散值。我需要收集统计信息并对这些值进行其他数值处理,并加快速度,我正在考虑使用整数(例如索引)代替std::string
。
Allowed Values:
Black, Red, Green
After transformation:
0,1,2 (respectively)
我还想控制无效值,例如yellow
无效,因为它不是允许的值。
因此,在t
的任何时候,我都会收到该值,需要将其解析为它的索引,然后使用它。 CAVEAT:延迟真的很重要,我需要尽快。
哪种方法可以实现这一目标?
答案 0 :(得分:0)
如果速度很重要,那么查找表始终是一个快速的解决方案。 C ++提供了关联容器。
地图是合适的解决方案。
请参见以下示例:
#include <string>
#include <map>
#include <iostream>
using KeyType = std::string;
using LookUpValue = int;
using LookUpTable = std::map<KeyType,LookUpValue>;
LookUpTable lookUpTable {{"Black",1}, {"Red",2}, {"Green",3}};
constexpr LookUpValue InvalidInput{0};
inline LookUpValue convertTextToKey(const std::string& text)
{
return (lookUpTable.end()==lookUpTable.find(text)) ? InvalidInput : lookUpTable[text];
}
int main()
{
std::cout << convertTextToKey("Nonsense") << ' ' << convertTextToKey("Black") << ' '
<< convertTextToKey("Red") << ' ' << convertTextToKey("Green") << '\n';
return 0;
}