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
你应该使用地图.事实上,你应该使用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)