在我的一个学校课程中,我使用以下函数来计算字符串中标识符的频率,用换行符和#分隔:
输入:
dog
cat
mouse
#
rabbit
snake
#
Run Code Online (Sandbox Code Playgroud)
功能:
//assume I have the proper includes, and am using namespace std
vector< pair<string,int> > getFreqcounts(string input) {
vector<string> items = splitString(input,"\n");
map<string,int> counts;
for (int i=0; i<items.size(); i++) {
if (items[i] == "#") continue;
counts[items[i]] = 0;
}
for (int i=0; i<items.size(); i++) {
if (items[i] == "#") continue;
counts[items[i]]++;
}
return vector< pair<string,int> > (counts.begin(),counts.end());
}
Run Code Online (Sandbox Code Playgroud)
我想至少
vector< pair<string,int> >有任何想法吗?
顺便说一句,这不是功课.真正的家庭作业将使用这个功能,但这完全出于我自己的好奇心和渴望拥有"更好"的代码.
我的理解std::map是,可以简单地消除整个第一个循环.当您第一次尝试访问不存在的节点时,map将默认为您创建它,将初始计数设置为零(内置类型的默认行为.)这应该是您需要进行的所有更改对你的代码,行为应该是相同的.
更新:在您提供的代码中的旁注counts将根据operator<定义的std::string(地图的键类型)进行排序,这将按map字典顺序对节点进行排序.没有必要通过矢量抽取结果并对矢量进行排序 - 地图会自动为您处理.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |