【发布时间】:2012-03-09 07:26:06
【问题描述】:
我正在扩展一个已经存在的 C++ 代码。 其中一个类成员是另一个类对象的向量类型:
class Road
{
....
vector<Link*> links; //Link is just another class
}
其他模块通过大量的序列迭代器使用这个类及其成员。 现在,在扩展代码时,我需要向 Link 类添加一个名为 linkID 的成员,并使用此 linkID 来查找/访问我的“Link”对象。
问题: 我不会通过迭代数百万个项目来搜索向量中的 Link 对象(使用 LinkID),而只是为了找到一个特定的 Link 对象。最好的解决方案是“地图”!对吧?
....
map<linkID,*link> links
....
lnk=links[linkID]
.........
但问题是我不能修改当前的源代码,除了非常小的修改,比如添加链接ID等。
所以我的明显问题是: 是否可以使用地图代替矢量(无论如何)。 换句话说,我想创建一个地图,将其填充,然后将其视为矢量。可能的? 谢谢你们的cmets
【问题讨论】:
-
只要您拥有的代码被巧妙地实现,即:不依赖
std::vector的随机迭代器行为,只需更改类型就可以了。当然,您最终将不得不重新访问所有实例如果您依赖容器的顺序性,但您无能为力,如果现有代码依赖于这种行为,那么它一开始就写得不好。 -
我同意上面的 Als。不过,这不仅仅是随机迭代器行为。例如,代码是否在执行类似
links.push_back(ptr)的操作?另外,代码是否依赖于位置访问链接? -
@KAZ FYI,linkID 是一个类似于“lnk001”的字符串,来自 XML,稍后将用作数据库表的 PK。
-
@Als:你的意思是我将地图类型转换为矢量吗? (最初填写地图,然后将其视为矢量?)可能吗?能给我举个例子吗?
-
你能有矢量图和地图吗?