Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';这是一个很好的未定义大小的数据结构,可以通过索引进行访问吗?_C++_Containers_Std - Fatal编程技术网

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;
    
编辑(另一项功能):

  • 我还需要为每个索引插入多个数据。我的意思是,如果我插入一些索引和数据,而索引已经存在,那么我希望它只是将数据附加到该索引中
我想到了int和数据的向量:

typedef std::vector<int,data> Vec;

但这也不支持按索引访问。

哈希映射如何<代码>数据
将是结构的名称。每个索引将映射到
数据的唯一实例

std::hash_map<int, data> 
std::hash\u映射

为什么不只使用法线贴图

例如,
typedef std::map myMap


我看不出有什么比这更新奇的了。

为什么不直接使用
std::map
?允许您按索引访问、支持稀疏索引、强制唯一索引等。您的意思是
typedef Vec而不是
类型定义向量向量索引
,我将推送
数据
。因此,一个索引将包含多个
数据
。这不是重点吗?如果您的意思是希望将索引和数据合并到一个插入中,那么您可能还需要查看:
typedef std::set mySet,虽然这与
映射非常相似,而且更详细。刚刚看到您的编辑。映射保证每个
索引有一个
数据
。您可能会将其与
multimap
混淆,后者确实允许每个
索引有多个
数据。如果尝试将新的
数据
插入到地图的现有
索引
,则插入将失败,并出现异常。如果您在插入时使用映射的
insert
方法(并且不使用重写的
[]
运算符),则可以捕获失败,它将为您提供一个到先前插入的
数据
@AlaaM的迭代器。您的问题不是说每个索引将有多个
数据
实例,请更新它。此外,将此解决方案扩展到
std::map
@AlaaM或使用
multimap
,就像我在上一篇评论中所描述的那样,也很简单。
std::hash_map<int, data>