我在程序中有以下類。boost上的多索引:: ptr_vector
class Class1 {
public:
boost::ptr_vector<Class2> fields;
}
class Class2 {
public:
std:string name;
unsigned int value;
}
欲寫在Class1
成員函數返回一個引用或指針基於等級2的name
變量fields
的元件。我不必關心容器中物體的壽命。
目前,我正在返回一個迭代器到我想要的元素後,該函數從矢量開始搜索元素。
boost::ptr_vector<Class2>::iterator getFieldByName(std::string name) {
boost::ptr_vector<Class2>::iterator field = fields.begin();
while (field != fields.end()) {
if (field->name.compare(name) == 0) {
return field;
}
++field;
}
return fields.end();
}
是我所面臨的問題是:
(1)我需要的元素快速隨機訪問或程序坐在getFieldByName()
太長(開始時boost::ptr_vector<>
太慢在容器的開頭)
(2)我需要保留字段的插入順序(所以我不能使用boost::ptr_map<>
直接)
我已經發現的boost ::多指標,它似乎可以提供問題的解決方案,但我需要使用智能容器,以便銷燬容器也會破壞容器所擁有的對象。
有無論如何實現一個智能容器,有多種訪問方法?
取消引用迭代器。它返回的值是一個參考。返回,也作爲參考。 – Brent 2014-10-21 21:11:56
@Brent我一定會在最後的功能中做到這一點。我更關心快速訪問數據並保留插入順序 – packersfan16 2014-10-21 21:14:20
哦,我明白了。你想O(log(n))查找而不是O(n)。巴里的回答看起來不錯。 – Brent 2014-10-21 21:15:31