不确定要使用哪种数据结构

Bli*_*mey 2 c++ data-structures

假设我有以下文字:

today was a good day and today was a sunny day. 
Run Code Online (Sandbox Code Playgroud)

我把这个文本分成几行,用白色空格分隔,这是

Today

was

a

good
Run Code Online (Sandbox Code Playgroud)

等等

现在我使用矢量数据结构通过.size()简单计算文本中的单词数.那已经完成了.

但是,我还要检查一个单词是否出现不止一次,如果出现,有多少时间.在我的例子中,"今天"出现2次.

我想存储"今天"并附加2/x(取决于它在大文本中出现的频率).现在,这不仅仅是针对"今天",而是针对文本中的每一个字.我想查找一个单词出现的频率,附加一个计数器,然后按降序排序(单词+计数器)(这是另一件事,但现在不重要).

我不确定在这里使用哪种数据结构.也许是地图?但是我无法添加计数器来映射.

编辑:这是我到目前为止所做的:http://pastebin.com/JncR4kw9

the*_*ker 5

你应该使用地图.事实上,你应该使用unordered_map.

unordered_map<string,int> 将为您提供一个哈希表,它将使用字符串作为键,您可以扩充整数以保持计数.

unordered_map具有O(1)查找和插入O(logn)查找和插入的优点map.这是因为前者使用数组作为容器,而后者使用树的一些实现(我认为是红黑).

a的唯一缺点unordered_map是,如其名称所述,您不能以词法顺序迭代所有元素.从上面的结构解释中可以清楚地看出这一点.但是,您似乎不需要这样的遍历,因此它不应该是一个问题.

unordered_map<string,int> mymap;
mymap[word]++; // will increment the counter associated with the count of a word.
Run Code Online (Sandbox Code Playgroud)