C++ 选择合适的数据结构

C++ 选择合适的数据结构,c++,data-structures,C++,Data Structures,我们正在读一本书,我们必须用它的计数来存储这本书的每一个字符 比如:“这是要测试的”输出应该是:T4 H1 I2 S3 O1 E1 这里最合适的数据结构是什么?为什么?这里的逻辑是什么。根据您的描述,您只需要对字符进行简单的哈希运算即可。这是因为在一本书中只能出现有限的字符集(甚至包括标点符号、重音符号和特殊字符)。因此,一个包含几百个条目的散列就足够了。根据您的描述,您只需要对字符进行简单的散列即可计数。这是因为在一本书中只能出现有限的字符集(甚至包括标点符号、重音符号和特殊字符)。因此,一个

我们正在读一本书,我们必须用它的计数来存储这本书的每一个字符

比如:“这是要测试的”输出应该是:T4 H1 I2 S3 O1 E1


这里最合适的数据结构是什么?为什么?这里的逻辑是什么。

根据您的描述,您只需要对字符进行简单的哈希运算即可。这是因为在一本书中只能出现有限的字符集(甚至包括标点符号、重音符号和特殊字符)。因此,一个包含几百个条目的散列就足够了。

根据您的描述,您只需要对字符进行简单的散列即可计数。这是因为在一本书中只能出现有限的字符集(甚至包括标点符号、重音符号和特殊字符)。因此,一个包含几百个条目的散列就足够了。

一个int数组就可以了。创建一个数组,每个索引都是字母表中的一个字母(在扫描书籍时,出于性能原因,可能需要分别存储大写和小写)。扫描时,在该字母的数组位置递增int。完成后,将它们全部打印出来。

这里可以使用一个int数组。创建一个数组,每个索引都是字母表中的一个字母(在扫描书籍时,出于性能原因,可能需要分别存储大写和小写)。扫描时,在该字母的数组位置递增int。完成后,将它们全部打印出来。

合适的数据结构应该是
std::vector
(或者,如果需要内置的东西,可以是数组)。如果您使用的是C++0x,
std::array
也可以很好地工作


逻辑非常简单——读取一个字符(显然是转换成大写),然后增加数组/向量中该项的计数。

合适的数据结构应该是
std::vector
(或者,如果您需要内置的数组)。如果您使用的是C++0x,
std::array
也可以很好地工作


逻辑非常简单——读取一个字符(显然转换为大写),并增加数组/向量中该项的计数。

选择数据结构不仅取决于要在数据结构中存储的数据类型,更重要的是取决于要对数据执行的操作类型

查看优秀图表,它有助于决定何时使用哪个STL容器


当然,在您的情况下,std::array(C+0x)或std::vector似乎是一个不错的选择。

选择数据结构不仅取决于要在数据结构中存储何种数据,更重要的是取决于要对数据执行何种操作

查看优秀图表,它有助于决定何时使用哪个STL容器


当然,在您的例子中,std::array(C+0x)或std::vector似乎是一个不错的选择。

让我们先听听您的意见。。。你熟悉什么结构?什么最合适?我不确定,但树DS会适合它。这个q应该有“家庭作业”标签吗?@Chris_vr,编辑问题,加入你的想法,你很可能会学到更多-不要简单地将你的家庭作业问题转移给其他人…树可以工作,但其他可用的结构也可以工作,您需要考虑您需要的数据结构的哪些特征(满足您的需求),以及您熟悉的结构的哪些特征与最适合的结构相匹配。让我们先听听您的意见。。。你熟悉什么结构?什么最合适?我不确定,但树DS会适合它。这个q应该有“家庭作业”标签吗?@Chris_vr,编辑问题,加入你的想法,你很可能会学到更多-不要简单地将你的家庭作业问题转移给其他人…树可以工作,但其他可用的结构也可以工作,您需要考虑数据结构的哪些特征(针对您的需求)你所熟悉的结构的特征是什么,并且与最合适的结构相匹配。哈希对于这个问题来说是非常复杂的。速度与简单的字符索引计数数组相比将是可怕的。足够公平-它的复杂度很高,但速度肯定不会非常糟糕。它们都是有效的O(1)。尽管O(1),哈希集访问比数组访问复杂得多。只要看看代码就知道了。在我看来,散列对于这个问题来说是极其复杂的。速度与简单的字符索引计数数组相比将是可怕的。这很公平——它的复杂度很高,但速度肯定不会更糟。它们都是有效的O(1)。尽管O(1),哈希集访问比数组访问复杂得多。只需遵循代码即可。