在C ++中声明,更改和添加一个结构列表数组

时间:2014-07-05 22:38:23

标签: c++ list struct linked-list malloc

我已经创建了一个结构体,结构体上有一个度量标准。我正在生成一系列这些结构,我想根据这个指标将它们排序成一个数组。基本上,如果度量标准为0,我希望它在数组的[0]槽中的列表中,如果度量值为14,我希望它在数组的[14]槽中的列表中。度量的约束(数组的大小)是基于生成结构的相同变量而变化的,因此我需要使用malloc动态声明数组。我一直在试验如何获取我的结构列表。我无法弄明白。我已经搜索了问题并且无法找到解决方案。

此外,一旦我有了数组,如何将另一个元素添加到特定数组单元格的列表中?然后返回并将第i个单元格中列表的所有元素与第(n-i)个单元格的元素进行比较?

编辑:也可能有助于并非所有指标都包含元素。

编辑2:我已经尝试了这一点,似乎有一些问题。

list<s_pair> *pairs;
pairs = (list<s_pair>*) malloc(sizeof(list<s_pair>) * (N + 1));

j = { a, b };
pairs[m].push_back(j);

其中m是j的度量,其类型为s_pair。它让我编译,但它试图push_back(j)。

1 个答案:

答案 0 :(得分:0)

在C ++中你可以这样做:

#include <vector>
#include <list>

size_t metric(s_pair const &);   

class MyTable
{
   std::vector< std::list<s_pair> > table;

public:
    void insert(s_pair s) 
    {
         size_t index = metric(s);
         if ( index + 1 > table.size() )
              table.resize(index + 1);
         table[index].push_back(s);
    }
};

(显然你还有其他功能可以访问表格等等。)

在这种设置中,如果metric可能是一个庞大的数字(比如20亿),那么效果不会很好。在这种情况下,你需要一个稀疏数组而不是一个向量(C ++没有标准的稀疏数组,但你可以找到一个或制作一个)。

样本用法:

int main()
{
    MyTable items; 
    items.insert( whatever );
}

在此示例中,没有项目的指标由空列表表示。