【发布时间】:2013-04-18 21:29:38
【问题描述】:
我正在尝试获取向量中所有相同字符串的数量的输出,作为更大程序的一部分。经过大量研究,我设法将一些可行的东西放在一起,但看起来很乱,我想知道是否有更好的方法来做到这一点。
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
void setMap(string i);
void addMap(string i);
map<string, int> myMap;
int main()
{
vector<string> myVector;
string myArray[6]={"foo","foo","bar","roo","foo","bar"};
for (int i=0; i<6; i++)
{
myVector.push_back(myArray[i]);
}
for_each (myVector.begin(), myVector.end(), setMap);
for_each (myVector.begin(), myVector.end(), addMap);
for (map<string, int, less< string >>::const_iterator iter = myMap.begin();
iter != myMap.end(); ++iter )
cout <<iter->first<<'\t'<<iter->second<<endl;
return 0;
}
void setMap(string i)
{
myMap[i]=0;
}
void addMap(string i)
{
myMap[i]++;
}
此代码运行良好,并为我提供了我所追求的输出,但我并不热衷于必须添加 2 个额外功能以使其工作或必须使地图成为全局。任何提示将不胜感激。
【问题讨论】:
-
如果你想使用
for_each,你可以使用一个functor来保存对你的地图的引用,从而消除你的大部分代码。 See it Live。您可以使用 lambda 使其更加更加紧凑。 See it live too.