gpt4 book ai didi

c++ - 如何使用 vector 或 map 存储不同字符的位置

转载 作者:行者123 更新时间:2023-11-30 02:28:15 28 4
gpt4 key购买 nike

我有一个像“aabcdba”这样的字符串,现在我想存储不同字符位置的位置。我正在尝试使用 vectorunordered_map 进行存储。有没有什么好的方法来存储不同字符的位置?

void topKFrequent(string s) {
vector<vector<int> >v(123);
//unordered_map<char, vector<int>>m;
for(int i=0;i<s.size();i++) {
v[s[i]].push_back(i);
// m[s[i]].push_back(i);
}
for(int i=0;i<123;i++) {
for(int j=0;j<v[i].size();j++) {
char ch=i;
cout<<ch<<"->"<<v[i][j]<<endl;
}
}
}

如果 string = "aabcdba",我想要以下结果:

 a->0,1,6;
b->2,5;
c->3;
d->4;

最佳答案

你可以使用 map<char, vector<unsigned int> > .

#include <iostream>
#include <map>
#include <string>
#include <vector>

using namespace std;

map<char, vector<unsigned int> > storePos(string s)
{
map<char, vector<unsigned int> > charPos;
for(int i=0;i<s.size();i++)
{
auto itr = charPos.find(s[i]);
if(itr != charPos.end())
{
itr->second.push_back(i);
}
else
{
charPos[s[i]] = vector<unsigned int>(1, i);
}
}
return charPos;
}

int main(void)
{
string example = "aabcdba";

auto result = storePos(example);

for(auto itr1 = result.begin(); itr1 != result.end(); itr1 ++)
{
cout << "Letter: " << itr1->first << ", Locations: ";
for(auto itr2 = itr1->second.begin(); itr2 != itr1->second.end();
itr2 ++)
{
cout << *itr2 << " ";
}
cout << endl;
}
}

关于c++ - 如何使用 vector 或 map 存储不同字符的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40939960/

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