C++ 什么';这是一个很好的未定义大小的数据结构,可以通过索引进行访问吗?
我需要一些未知大小的数据结构来支持以下内容:C++ 什么';这是一个很好的未定义大小的数据结构,可以通过索引进行访问吗?,c++,containers,std,C++,Containers,Std,我需要一些未知大小的数据结构来支持以下内容: 按索引推送数据。也就是说,每个项目将由两部分组成:一个索引(可能不是连续的,即1,3,7…),另一部分称为数据: struct data { float par[PARAMETERS]; int cluster; bool visited; bool noise; }; 因此,数据推送看起来像这样: data d; //some work on d... temp.i = 2; temp.data = d; vec
- 按索引推送数据。也就是说,每个项目将由两部分组成:一个索引(可能不是连续的,即1,3,7…),另一部分称为
数据
:
因此,数据推送看起来像这样:struct data { float par[PARAMETERS]; int cluster; bool visited; bool noise; };
data d; //some work on d... temp.i = 2; temp.data = d; vec.pushback(temp);
- 索引的可访问性。也就是说,如果向量名为
,那么我希望能够通过vec
访问它。例如:vec[i]
vec[i].visited = true;
- 我还需要为每个索引插入多个数据。我的意思是,如果我插入一些索引和数据,而索引已经存在,那么我希望它只是将数据附加到该索引中
typedef std::vector<int,data> Vec;
但这也不支持按索引访问。哈希映射如何<代码>数据将是结构的名称。每个索引将映射到
数据的唯一实例
std::hash_map<int, data>
std::hash\u映射
为什么不只使用法线贴图
例如,typedef std::map myMap代码>
我看不出有什么比这更新奇的了。为什么不直接使用std::map
?允许您按索引访问、支持稀疏索引、强制唯一索引等。您的意思是typedef Vec代码>而不是类型定义向量向量我同意std::map,但根据参数的大小,可以使用动态分配的数据实例。因为,根据您执行的操作,数据会被复制。因此:std::map@tillaert:此处可能不需要普通向量,因为索引不一定是连续的。稀疏索引可能需要一个非常大的向量,这可能会非常低效。@Rook,你说得对,我已经更新了它。因为对于每个索引
,我将推送数据
。因此,一个索引将包含多个数据。这不是重点吗?如果您的意思是希望将索引和数据合并到一个插入中,那么您可能还需要查看:typedef std::set mySet代码>,虽然这与映射非常相似,而且更详细。刚刚看到您的编辑。映射保证每个索引有一个数据。您可能会将其与multimap
混淆,后者确实允许每个索引有多个数据。如果尝试将新的数据
插入到地图的现有索引
,则插入将失败,并出现异常。如果您在插入时使用映射的insert
方法(并且不使用重写的[]
运算符),则可以捕获失败,它将为您提供一个到先前插入的数据
@AlaaM的迭代器。您的问题不是说每个索引将有多个数据
实例,请更新它。此外,将此解决方案扩展到std::map
@AlaaM或使用multimap
,就像我在上一篇评论中所描述的那样,也很简单。
std::hash_map<int, data>