在我的实验性编程语言的解释器中,我有一个符号表.每个符号由一个名称和一个值组成(值可以是:例如:string,int,function等类型).
首先,我用一个向量表示该表,并通过符号迭代检查给定的符号名称是否合适.
然后,我使用地图,在我的情况下map<string,symbol>,总是比迭代迭代矢量更好,但是:
解释这部分有点难,但我会试试.
如果在我的语言的程序中第一次检索变量,当然必须找到它在符号表中的位置(现在使用向量).如果我每次执行该行时都会迭代向量(想想一个循环),那么它将非常慢(因为它目前是,几乎和microsoft的批处理一样慢).
所以我可以使用地图来检索变量: SymbolTable[ myVar.Name ]
但想想以下内容:如果第一次找到仍使用向量的变量,我可以将它的精确整数位置存储在向量中.这意味着:下次需要它时,我的解释器知道它已被"缓存"并且不会在符号表中搜索它,而是执行类似的操作SymbolTable.at( myVar.CachedPosition ).
现在我的(相当难的?)问题:
我应该使用向量作为符号表,同时缓存向量中变量的位置吗?
我应该使用地图吗?为什么?[]运算符的速度有多快?
我应该使用完全不同的东西吗?