我已经创建了一个结构体,结构体上有一个度量标准。我正在生成一系列这些结构,我想根据这个指标将它们排序成一个数组。基本上,如果度量标准为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)。
答案 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 );
}
在此示例中,没有项目的指标由空列表表示。