同时添加和删除匹配时比较数组中的项目

时间:2017-01-25 00:44:06

标签: c++ arrays struct compare

我有这个留言板,出售,想要,下面的程序类型。我终于想出了如何阅读所有内容,但需要有关如何比较项目的建议。当我在文件中读到时,想要检查数组以查看是否需要一个项目(true)并计算数组中已有项目的名称并进行销售。如果找到匹配项,则不添加该项,并从数组中删除所需项,然后切换。

CREATE TABLE `parent_child_columns` (`id` int auto_increment,
                                     `child_id` int,
                                       `parent_id` int,
                                     `level` int,
                                     PRIMARY KEY (`id`))

INSERT INTO `parent_child_columns` (`child_id`, `parent_id`, `level`)
VALUES (1, 0, 1), (2, 0, 1),
       (3, 1, 2), (4, 1, 2),
       (5, 3, 3), (5, 1, 3), (6, 3, 3), (6, 1, 3)



SELECT pc.child_id, pc.level
FROM parent_child_columns pc
ORDER BY pc.parent_id

}

}

1 个答案:

答案 0 :(得分:1)

我不会为你编写代码,但我会告诉你我是如何解决这个问题的。

首先,我将arr重新定义为

std::list<MessageBoard> arr;

要将元素添加到列表,请使用list::push_back

  

如果需要的项目(true)并计算数组中已有项目的名称

编写bool函数,如果满足这些条件则返回true,否则返回false。

使用您的功能使用std::findstd::find_if扫描列表。如果搜索成功,则该函数返回指向所需项目的迭代器。

  

删除想要的项目

在迭代器上使用list::erase。如果你搞砸了,删除无效迭代器的结果是未定义的,但很可能你的运行时库会让你知道。

  

并转移

没有必要。列表长度自行处理。

您可能还会考虑std::set进行有效搜索,或std::map<MessageBoard, int>保留相同元素的计数。

通过使用标准库容器,您可以提升逻辑从按位置处理数组元素,并使其更接近匹配消息的问题。你也会写更少的循环。

如果我建议,我会给arrboard打电话messages。使用该名称来传达编译器不知道的含义。此外,atoi在这里有点不合适。由于您已经在stringstream领域,因此您也可以通过这种方式提取价格。

stringstream sw(word);
sw >> arr[index].price;

HTH。