如何使用不连续的键在c ++中创建动态的结构数组?
我有这样的结构:
struct Data {
int name;
int val;
}
我正在从可变长度的文件中读取names
。
我们说它是:
1 2
3 5
7 12
最后我想要一个由name
索引的(动态)数组,
像这样(伪代码):
arr[1] = *Data(1,2)
arr[3] = *Data(3,5)
arr[7] = *Data(7,12)
预期结果:
cout << arr[7]->val // outputs 12
cout << arr[3]->val // outputs 5
// array size = 3
如何用c ++写这个?
(假设只有基本特征,没有矢量,地图等)。
到目前为止,我尝试过这样的事情:
Data *distances = new Data[15]; // explicit size works
// Data *distances = new Data; // this don't
distances[5] = myDataStruct;
答案 0 :(得分:1)
这为只有一个Data
元素分配内存。
Data *distances = new Data;
这为15个Data
元素分配内存。
Data *distances = new Data[15];
要得到你想要的东西,你可以
operator[]
的类,该类不执行数组查找,但列表中的查找答案 1 :(得分:0)
Naïve实现(这不支持在数组中添加新元素,只支持从现有元素中查找。我将完整的实现作为练习留给读者):
struct associative {
Data* data_arr;
Data* end;
Data* operator[](int i) {
return linear_search(data_arr, end, i);
}
};
您可以使用std::find
(使用自定义谓词)代替linear_search
,但如果您的定义中没有包含在“基本功能”中,那么您可以我只需要重新实现它。线性搜索并不难实现。
这种天真的数据结构可以改进的方式很少:
std::map
或无序变体。考虑不要重新发明轮子。