我怎样才能让一对向量像哈希表一样工作呢?
How can I make a vector of pairs work like a hash table?
我正在为一个类项目开发一个1位双峰分支预测模拟器。我正在考虑使用一个unordered_map表,但我需要能够设置大小,所以我在想使用一对向量和表。reserve(tableSize)可能是一个很好的方法来做到这一点。
然而,这让我只能线性搜索向量来查找表项,这是非常慢的。有人知道我可以为这个应用程序实现哈希函数的方法吗?
对于那些不知道分支预测表如何工作的人,关键是PC地址0x12345678,值是T或NT(分支采取或未采取)。我还需要一个解决碰撞的方法。如果进行了分支,则该位(bool)被设置为true,这将是下一个分支的预测值。如果下一个分支未被占用,则该位被设置为false或0。模拟器的目的是测量正确的预测与总分支,以获得准确性,并将其与其他方法的准确性进行比较。因此,最终目标是使用PC的2个最低有效字节(通过屏蔽它们)来定义哈希表中的位置,以存储预测值0或1。
任何帮助都将是非常感激的。
附带说明:最大表大小将是1024个条目,因此时间复杂度不会有机会真正扩展到那么高,但任何优化都是值得的,因为我将进入竞争。
编辑:
决定使用unordered_map
这是我目前得到的解决方案:
头文件// bimodal 1-bit
class BM1Pred{
private:
std::ofstream &outputFile;
//hash table with bool value mapped to addresses
// 0 - NOT TAKEN, 1- TAKEN
unordered_map<long long, bool> table;
int tableSize;
public:
// constructor
BM1Pred(std::ofstream& file, int size)
: outputFile(file), tableSize(size) {}
// deconstructor
~BM1Pred()
{}
// member functions
void parseResults(std::string filename);
};
您仍然可以使用std::unordered_map
。如果想保留一个特定的大小,可以使用std::unordered_map::reserve.
但是我不明白为什么std::map
不是一个选择。它的大小动态变化。为什么需要"设置它的大小"?
为了回答您的其他问题,在这两种情况下,map[key]
返回对映射到相当于key
的键的值的引用,如果该键不存在,则执行插入。通过
map[key] = value;
如果容器中已经存在key
,则将key
的值更新为value
;否则,执行插入操作。你不需要自己检查任何东西
我建议使用映射容器和[]
操作符。查看这个在线参考,了解更多map
性能细节(例如红黑树):Big-O Cheatsheet。查看std::map和类模板std::map了解属性、成员函数、迭代器等详细信息。据我所知,映射容器在c++ 11中被实现为红黑树。我只知道在90年代末,它是作为红黑树来实现的。请记住,默认情况下顺序将从低到高(例如less<Key>
)。
- QSqlquery prepare()和bindvalue()不工作
- 像自定义类一样构造的指针(内置类型)如何工作?
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?
- 右值引用是否像右值引用一样工作
- C 参考与宏替换一样工作
- 为什么 gRPC C++ 客户端在没有显式服务器的 SSL 证书的情况下无法工作,就像在示例中一样?
- 如何与非平凡的成员这样的工会像班级一样正常工作
- 如何在 C++ 中创建一个类,使其像本机 int 类一样工作
- C++ 二叉搜索算法像lower_bound一样工作
- 是否有可能使自己的winapi功能像getpixel一样在Windows上工作
- 如何让 ss << f 像 printf( "%g" , f) 一样工作;
- 定义一个像 Python "with" 语句一样工作的 C 宏有什么缺点?
- c++中是否有任何数据结构或库可以像Python列表和字典一样工作?
- 为什么int8像char一样工作(c++) (Visual Studio 2015)
- 为什么getchar像缓冲区一样工作,而不是像预期的那样实时工作?
- 搜索一个数据结构,它可以像地图一样工作,也可以检索其他信息
- 传递常量引用…它像最重要的const一样工作吗
- 我能让赋值运算符像复制构造函数一样工作吗
- C++:"such strings"类型。使像 fun( "str" ) 一样的函数调用工作
- 我怎样才能让一对向量像哈希表一样工作呢?