gpt4 book ai didi

c++ - 计算 vector 中相同字符串的更简单方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:16 26 4
gpt4 key购买 nike

作为一个更大程序的一部分,我正在尝试获取一个 vector 中所有相同字符串的数量的输出。经过大量研究,我设法将一些有用的东西放在一起,但它看起来很乱,我想知道是否有更好的方法来做到这一点。

#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 个额外的函数才能使其工作或必须使 map 成为全局 map 。如有任何提示,我们将不胜感激。

最佳答案

没有额外功能并且没有全局 map 的最简单方法是不使用 for_each。

for_each (myVector.begin(), myVector.end(), setMap);
for_each (myVector.begin(), myVector.end(), addMap);

成为

map<string, int> myMap;
for (vector<string>::iterator i = myVector.begin(); i != myVector.end(); ++i)
myMap[*i]=0;
for (vector<string>::iterator i = myVector.begin(); i != myVector.end(); ++i)
++myMap[*i];

完成后,您还可以删除第一个循环

map<string, int> myMap;
for (vector<string>::iterator i = myVector.begin(); i != myVector.end(); ++i)
++myMap[*i];

因为 map 值无论如何都会被初始化为零。

是什么让您认为无论如何都必须使用 for_each?

关于c++ - 计算 vector 中相同字符串的更简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com