【发布时间】:2010-09-22 15:23:57
【问题描述】:
我正在使用Id 类型,它在我正在使用的代码的另一部分中定义:
typedef int Id;
现在我提供了许多对象,每个对象都带有这样的Id,我想使用Id 作为存储这些对象的std::vector 的索引。它可能看起来像这样:
std::vector<SomeObj*> vec(size);
std::pair<Id, SomeObj*> p = GetNext();
vec[p.first] = p.second;
问题是std::vector 使用它自己的类型来索引它的元素:std::vector::size_type(为什么不是模板化的?)。
所以严格来说,使用std::map<Id, SomObj*>会更好,但是这样效率会更低,而且我这里真正需要的是一个数组(我知道所有对象的索引都是连续的,并且以0开头)。另一个问题是typedef int Id 将来可能会更改为typedef long int Id 或类似的......(虽然它是我自己代码的一部分,所以我控制它,但理想情况下我应该被允许更改typedef at一些要点;这就是 typedef 的用途)。
你会如何处理这个问题?也许使用unordered_map<Id, SomeObj*>,其中哈希函数直接使用Id作为哈希键?那会不会降低内存效率? (我不完全明白unordered_map是如何分配空间的,因为事先不知道hash函数的范围?)
【问题讨论】:
-
你错过了最后一段中的反引号。
标签: c++ data-structures stl vector typedef