【问题标题】:Declaring, changing, and adding to an array of a list of structs in C++在 C++ 中声明、更改和添加到结构列表的数组
【发布时间】:2014-08-26 18:53:27
【问题描述】:

我创建了一个结构,并且该结构上有一个指标。我正在生成一系列这些结构,我想根据这个指标将它们排序到一个数组中。基本上,如果度量为 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 是类型为 s_pair 的 j 的度量。它让我编译,但它在尝试 push_back(j) 时卡住了。

【问题讨论】:

  • 每个指标是否只有一个结构,您的分布是否密集(也就是很少或没有孔)?请注意declaring 不是您使用的意思,您想要definingallocating。这对于 C 和 C++ 尤其重要,因为它们都是不同且定义明确的概念。 (defining 暗示 declaring,但不是相反)
  • 没有。每个指标都有可能没有结构或一堆结构。而且我不得不说,四分之一的指标可能没有任何结构,但其余的应该至少有一个。此外,注意到。声明和定义没有什么关系?
  • 看起来您正在描述一个带有开放链接的哈希表。 (您的指标是哈希函数)
  • 看看定义这些概念的 C 标准。有免费的草稿。不管怎样,你想要一个满足你所有的参考需求。
  • 在 C++ 中,malloc 你的 list 几乎可以肯定是一个错误,因为这会保留空间但不会构造任何对象。我建议选择一种语言,因为每种语言的答案都大不相同。

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


【解决方案1】:

在 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 );
}

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

【讨论】:

  • 如果您以前没有经常使用 C++,您必须确保 s_pair 具有正确的值语义(这样,如果它被复制或移动,它仍然是有效的对象)。最简单的方法是使其仅具有本身具有适当值语义的成员变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2018-05-20
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多